int [] []和int [,]有什么区别?

时间:2010-08-12 14:44:48

标签: c#

  

可能重复:
  What are the differences between using int[][] and int[,]?

我刚看到这个符号:

int[,]

每当我需要我使用的矩阵时:

int[][]

有什么区别?何时使用哪一个?

修改 感谢您的快速回复。我可以想到这一点。对于像这样的东西谷歌也很难。

现在我明白了目的。但它们如何与System.Array相关?

5 个答案:

答案 0 :(得分:44)

int[,]矩形数组 - 一个具有两个维度的对象。数组的每个元素都是整数;所有元素都连续存储在内存中。

int[][]是一个锯齿状的数组 - 一个数组,其中每个元素又是int[]。 (所以它是一个数组数组。)虽然“顶级”数组的每个元素都是连续存储的,但这些元素只是对其他数组的引用,这些数组可能在内存中的任何位置。

尽管矩形数组每行的列数始终相同,但在锯齿状数组中,每个元素的长度可能不同(或者实际上可能为null)。

每个都有自己的优点和缺点;矩形阵列在内存方面更紧凑,但不允许稀疏人口。 JR格式数组在CLR中速度更快,但没有那么好的缓存一致性。在某些情况下,锯齿状数组中“行数组”占用的额外空间可能很大 - 如果你有int[10000, 2]只占用80000字节加上一个数组对象的开销,而在锯齿状数组中它将是数据的80000字节和10001个数组对象的开销。

MSDN在arrays tutorial

中有更多信息

答案 1 :(得分:10)

第一个是偶数(每行包含相同数量的元素) 第二个是锯齿状(每行可能包含不同数量的元素)

换句话说,第一个是多维数组 - 一个矩形数组。第二个是数组数组(因此,每个单独的数组可以具有不同的长度。)

答案 2 :(得分:4)

int[x,y]是具有固定尺寸的二维数组(例如int[4,5]int[][]是一个锯齿状数组,这意味着它是一个数组数组,每个数组都可以有不同数量的元素。

答案 3 :(得分:2)

为了创建矩阵,int[,]更容易。锯齿状数组int[][]需要更多工作(你需要一个额外的循环到setup the complete matrix)。

但您可能仍需要考虑int[][],因为它是faster

答案 4 :(得分:0)

正如其他人提到的那样,int[,]是一个多维/矩形数组,而int[][]是一个数组数组,或者是一个“锯齿状”数组。

至于你何时使用另一个,int[][]可能很难设置(每一行都必须创建),但它似乎总是更快一点。 int[,]的优点是它更简单,并且规则性得到强制执行,这使得它非常适合您的需要。 (与数组数组相比,在2D数组中意外替换整行更难。)