在C#中我有一个用例,我有一个从int
到集合的映射。
int
是一个密集(但未打包)的集合,从1到n,其中n是未知的。List<T>
或T[]
一样好)最好的结构是什么?
List<T>
效果会很好(空间比Dictionary<>
更好),从中得出我能得到的很多东西,但有更好的东西吗?正如最好的代码是你不写的代码。
答案 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个数据元素时,快速排序算法实现有时会切换到更简单的排序算法。
干杯!