我想吃我的蛋糕。
我喜欢 C# 中的列表在超出数组的初始容量时动态扩展的方式。然而,这还不够。我希望能够做这样的事情:
int[] n = new int[]; // Note how I'm NOT defining how big the array is.
n[5] = 9
是的,速度会有所牺牲,因为在幕后,.NET 需要检查是否超出了默认容量。如果有,那么它可以将数组扩展 5 倍左右。
不幸的是,对于列表,您并不是真的要设置任意元素,尽管如果您可以 do this , 仍然不可能在没有初始设置列表大小的情况下直接设置第五个元素,更不用说在尝试时动态扩展了。
对于任何解决方案,我都希望能够保持简单的方括号语法(而不是使用相对冗长的方法调用),并且在执行时相对较快(最好几乎与标准数组一样快)不扩展数组。
最佳答案
请注意,我并不一定主张继承 List,但如果你真的想要这样:
public class MyList<T> : List<T>
{
public T this[int i]
{
get {
while (i >= this.Count) this.Add(default(T));
return base[i];
}
set {
while (i >= this.Count) this.Add(default(T));
base[i] = value;
}
}
}
我要补充一点,如果您希望“数组”的大部分值在程序的整个生命周期内保持为空,那么使用 Dictionary<int, T>
会提高效率。 ,尤其是随着集合的规模变大。
关于c# - 糖衣阵列(动态调整大小并随机设置任何元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352450/