c# - 糖衣阵列(动态调整大小并随机设置任何元素)

标签 c# .net arrays list syntactic-sugar

我想吃我的蛋糕。

我喜欢 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/

相关文章:

c# - 如何最小化生成代码在磁盘上的程序集大小?

c# - .NET反射如何确定方法返回类型(包括void)和参数?

c++ - 我需要帮助在 C++ 中尽可能压缩此 IF 语句

c# - 设置注册表值时出现 NullReferenceException

c# - 在 C# 中使用正则表达式对列表元素进行排序

c# - 为什么 `.Select(...).Last()` 被优化,而 `.Select(...).Last(...)` 没有被优化?

c# - 通过遍历列表创建新的 StringBuilder,删除最后一个元素

c# - VisualStudio建议在重要的地方删除this-Keyword?

python - 如何使用 SWIG 将 C++ 数组转换为 Python 列表?

python - 将 float 重载到 numpy 数组