随机订单人口的最佳C#数据结构?

时间:2009-01-26 21:04:24

标签: c# data-structures collections

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

  • int是一个密集(但未打包)的集合,从1到n,其中n是未知的。
  • 将按随机顺序加载单元格。
  • 每个单元格的边际成本应该是理想的(与List<T>T[]一样好)
  • 我希望按需填写单元格

最好的结构是什么?

List<T>效果会很好(空间比Dictionary<>更好),从中得出我能得到的很多东西,但有更好的东西吗?正如最好的代码是你不写的代码。

2 个答案:

答案 0 :(得分:4)

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));
}

答案 1 :(得分:1)

如果你想成为一个真正的坚持者,一个选择是编写一个外观类,它提供围绕许多不同的映射器的策略。当N <&lt;时,使它使用静态定义的数组。一些值,当负载(打包性)超过某个阈值时。当某些阈值通过时,让它交换为树或字典表示。

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

干杯!