Dan*_*n W 1 .net c# arrays list syntactic-sugar
我想要我的蛋糕并吃掉它.
当你超越数组的初始容量时,我喜欢C#中Lists的动态扩展方式.但这还不够.我希望能够做到这样的事情:
int[] n = new int[]; // Note how I'm NOT defining how big the array is.
n[5] = 9
Run Code Online (Sandbox Code Playgroud)
是的,速度会有一些牺牲,因为在幕后,.NET需要检查是否已超出默认容量.如果有,则可以将阵列扩展5倍左右.
遗憾的是,对于Lists,你并不是真的想要设置一个任意元素,虽然你可以这样做,但是如果没有初步设置List的大小,仍然无法直接设置say,第五个元素,更不用说让它在尝试时动态扩展.
对于任何解决方案,我希望能够保持简单的方括号语法(而不是使用相对详细的方法调用),并且当它不扩展时,它具有相对快速(最好与标准数组一样快)阵列.
请注意,我不一定主张继承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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我要补充一点,如果你期望你的"数组"的大多数值在你的程序生命周期内保持空白,那么通过使用a Dictionary<int, T>,你将获得更高的效率,特别是当集合的大小变大时.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |