C#将锯齿状阵列归零

时间:2018-04-12 14:02:15

标签: c# zero jagged-arrays

我经常在编程中使用锯齿状数组。通常,它们的大小是静态的,但我会用新数据重新填充它们。在过去,我刚刚使用'new'运算符来清除数组,然后重新初始化它。但是,我怀疑这可能不是最好的做法 有关清除锯齿状阵列并将其所有值归零的最佳方法的建议吗?

我熟悉Array.Clear,但据我所知,由于Jagged数组在技术上并不连续,我相信我必须循环并清除每个孩子? 提前致谢! 贾斯珀

3 个答案:

答案 0 :(得分:1)

我会使用Array.Clear()

int[][] jagged = new int[][] {
    new int[] { 1, 2, 3, 4 },
    new int[] { 11, 12 },
    new int[] { 21, 22, 23 }
};

for (int i = 0; i < jagged.Length; i++)
{
    Array.Clear(jagged[i], 0, jagged[i].Length);
}

而不是

for (int i = 0; i < jagged.Length; i++)
{
    for (int j = 0; j < jagged[i].Length; j++)
    {
        jagged[i][j] = 0;
    }
}

答案 1 :(得分:0)

通过分配null以使阵列为垃圾收集做好准备就足以删除所有现有引用。 type elem= |Nil |Elem of {content:int;mutable next:elem};;

然后可以通过调用(array=null)

强制进行垃圾回收

答案 2 :(得分:0)

是的,我相信你必须在子阵列上循环。

锯齿状数组是一个数组数组。 default( refenence type )是空引用。因此,清除锯齿状数组将是一个空引用数组。

但是你希望清除那些数组的每个成员:

foreach (int[] subArray in jaggedArr)
{
    Array.Clear (subArray, 0, subArray.Length);
}