繁体   English   中英

随机订单总体的最佳C#数据结构?

[英]Best C# data structure for random order population?

在C#中,有一个用例,其中有从int到集合的映射。

  • int是从1到n的密集(但未压缩)集合,其中n未知。
  • 单元将以随机顺序加载。
  • 每个像元的边际成本应理想(与List<T>T[]
  • 我想按需填充默认单元格

最佳的结构是什么?

List<T>可以很好地工作(在空间上比Dictionary<>更好),并且通过派生它可以得到很多我想要的东西,但是还有什么更好的东西吗? 最好的代码就是您不编写的代码。

Dictionary<int, Cell>听起来很适合我。 或者,您可以很轻松地使用List<Cell> ,并确保在必要时进行扩展:

public static void EnsureCount<T>(List<T> list, int count)
{
    if (list.Count > count)
    {
        return;
    }
    if (list.Capacity < count)
    {
        // Always at least double the capacity, to reduce
        // the number of expansions required
        list.Capacity = Math.Max(list.Capacity*2, count);
    }
    list.AddRange(Enumerable.Repeat(default(T), list.Capacity-list.Count));
}

如果您想成为一名真正的stickler,一种选择是编写一个facade类,它提供围绕许多不同的mapper的策略。 使其在N小于某个值并且负载(打包)超过某个阈值时使用静态定义的数组。 超过某些阈值时,将其交换为Tree或Dictionary表示形式。

您没有说明构建此数据结构后如何实际与之交互的计划,因此,根据访问/使用模式的不同,混合策略可能会提供比坚持单个数据表示更好的运行时行为。 当要排序的集合的数据元素少于N个时,以与快速排序算法实现有时会切换到更简单的排序算法类似的方式来考虑它。

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM