【问题标题】:Best C# data structure for random order population?随机顺序人口的最佳 C# 数据结构?
【发布时间】:2009-01-26 21:04:24
【问题描述】:

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

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

什么是最好的结构?

List<T> 可以很好地工作(在太空中比Dictionary<> 更好)并且通过从中派生我可以获得很多我想要的东西,但是还有更好的东西吗?最好的代码是你不写的代码。

【问题讨论】:

标签: c# data-structures collections


【解决方案1】:

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

【讨论】:

  • 我想利用键的密集特性
  • 在您发表评论时编辑了答案 :)
  • 是的。你的想法和我一样,有没有人发布过代码来把它塞进索引函数中?
  • 嗯,你可以使用扩展方法使其更容易调用(只需在 C# 3.0 的 arg 前添加“this”)
  • 我建议使用list.Capacity = Math.max(count, list.Capacity * 2),因为这会减少对该方法的重复调用的重复分配。
【解决方案2】:

如果你想成为一个真正的坚持者,一个选择是编写一个外观类,它提供围绕许多不同映射器的策略。使其在 N

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

干杯!

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多