C#调零锯齿阵列

C#调零锯齿阵列,c#,zero,jagged-arrays,C#,Zero,Jagged Arrays,我经常在编程中使用交错数组。通常,它们的大小是静态的,但我会用新数据重新填充它们。在过去,我只是使用“new”操作符清除数组,然后重新初始化它。然而,我怀疑这可能不是最佳实践。 关于清除锯齿状数组并将其所有值置零的最佳方法,有什么建议吗 我熟悉数组。清除,但就我所知,因为锯齿数组在技术上不是连续的,我相信我必须逐个循环并清除每个子数组? 提前谢谢! 贾斯帕我会用 int[]jagged=new int[]{ 新的int[]{1,2,3,4}, 新的int[]{11,12}, 新int[]{21,

我经常在编程中使用交错数组。通常,它们的大小是静态的,但我会用新数据重新填充它们。在过去,我只是使用“new”操作符清除数组,然后重新初始化它。然而,我怀疑这可能不是最佳实践。
关于清除锯齿状数组并将其所有值置零的最佳方法,有什么建议吗

我熟悉数组。清除,但就我所知,因为锯齿数组在技术上不是连续的,我相信我必须逐个循环并清除每个子数组? 提前谢谢! 贾斯帕

我会用

int[]jagged=new int[]{
新的int[]{1,2,3,4},
新的int[]{11,12},
新int[]{21,22,23}
};
for(int i=0;i
而不是

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

int[]jagged=new int[]{
新的int[]{1,2,3,4},
新的int[]{11,12},
新int[]{21,22,23}
};
for(int i=0;i
而不是

for (int i = 0; i < jagged.Length; i++)
{
    for (int j = 0; j < jagged[i].Length; j++)
    {
        jagged[i][j] = 0;
    }
}
for(int i=0;i
通过分配null来删除所有现有引用就足够了,这样可以使数组为垃圾收集做好准备<代码>(数组=null)


然后,可以通过调用
(array.Collect())

强制垃圾收集。通过分配null,将数组准备好进行垃圾收集,删除所有现有引用就足够了<代码>(数组=null)


然后可以通过调用
(array.Collect())

强制垃圾收集。是的,我相信您必须在子数组上循环

锯齿数组是数组的数组。
默认值(引用类型)
为空引用。所以一个清晰的锯齿状数组就是一个空引用数组

但您希望清除这些数组中的每个成员,以便:

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

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

锯齿数组是数组的数组。
默认值(引用类型)
为空引用。所以一个清晰的锯齿状数组就是一个空引用数组

但您希望清除这些数组中的每个成员,以便:

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

如果您创建了一个大数组,并且打算重用它,那么从内存角度来看,清除现有的数组比删除它并创建一个全新的内存段要好。@Patrickhoffman在共享内存上执行并行程序怎么样?此解决方案可能有用,具体取决于具体情况。如果您创建了一个大数组,并打算重用它,那么在内存方面,最好清除现有的数组,而不是删除它并创建一个全新的内存段。@Patrickhoffman在共享内存上执行并行程序如何?此解决方案可能有用,这取决于具体情况。清除清除的锯齿是空数组这一事实似乎是一个需要澄清的问题。@PatrickHofman,但这里甚至没有复制粘贴Fubo的字符。“但我可以说得更清楚一些。”帕特里克霍夫曼,如果你仍然觉得它没有自己的个性,我可以给出答案。基本步骤是以粗体显示的一行排序答案,然后是此特定案例的答案以及MSDN和C#source的相关链接。然后是一个通用实现。顺便说一句,我的英语不好,这不是讽刺,我是认真的。而且我个人发现它更具可读性,特别是当多个锯齿状数组交错在一起时。清除一个被清除的锯齿状数组是一个空数组这一事实似乎是一个需要澄清的问题。@Patrickhoffman,但这里甚至没有复制粘贴Fubo的一个字符。“但我可以说得更清楚一些。”帕特里克霍夫曼,如果你仍然觉得它没有自己的个性,我可以给出答案。基本步骤是以粗体显示的一行排序答案,然后是此特定案例的答案以及MSDN和C#source的相关链接。然后是一个通用实现。顺便说一句,我的英语不好,这不是讽刺,我是认真的。我个人发现它更具可读性,特别是当多个锯齿状数组交错在一起时。使用C#的原因之一是这样你就不必担心这个问题。只需创建新的阵列-C#cleans for you(按设计)。“过去,我只是使用“new”操作符清除阵列,然后重新初始化它。但是,我怀疑这可能不是最佳做法。”为什么?是什么让您认为清除数组比在同一引用上实例化新数组更好?(我不是说你错了或对了,我从来没有亲自检查过,我只是好奇你的推理。)就像我说的,我过去总是创造新的。然而,我怀疑在每次调用新操作符时分配内存会有一定的开销,这可能会使垃圾收集器的工作更加困难。也就是说,我不知道它与运行Clear操作符的开销相比如何。我主要使用相当大的3D阵列进行图像处理,所以在处理阵列操作时,性能绝对是一个考虑因素!谢谢你的解释。我不确定分配内存和垃圾收集的开销是否大于清除3d交错数组(这至少需要嵌套循环+array.Clear)。您可能想知道使用C#的原因之一是您不必担心这一点。只需创建新的阵列-C#cleans for you(按设计)。“过去,我只是使用“new”操作符清除阵列,然后重新初始化它。但是,我怀疑这可能不是最佳做法。”为什么?是什么让您认为清除数组比实例化新数组更好