【问题标题】:init jagged array to zeros将锯齿状数组初始化为零
【发布时间】:2018-10-03 00:07:03
【问题描述】:

有没有更简洁的方法来初始化这个锯齿状数组?

    var r = new int[a.Length][];
    for (int i=0; i<a.Length; i++)
    {
        r[i] = new int[2];
    }

我不想要一个多维数组int[,],因为我以后可能需要分配给int[2]以外的一些元素

【问题讨论】:

标签: c# arrays init jagged-arrays


【解决方案1】:

答案是否定的,你不能在初始化时隐式地default 一个锯齿状数组。

锯齿状数组实际上只是一个数组(在这种情况下是另一个数组),因此每个元素都必须由其自身初始化。

我可以建议使用

  • 一个 多维数组,在初始化时这又会是 defaulted。

  • 无法为default 编写通用帮助程序并进行初始化

  • 或扩展方法

【讨论】:

  • 就我而言,多维数组可能非常稀疏,例如我可能有a[0]=int[2] ....... a[1000]=int[100],这意味着int[1000,100],我假设它分配的内存比int[1000][]多得多
【解决方案2】:

Linq 等价物只是 稍微 不那么冗长:

int[][] r = Enumerable.Range(1,a.Length)
                      .Select(i => new int[2])
                      .ToArray();

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2019-06-17
    • 1970-01-01
    • 2014-05-03
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多