可能重复:
What are the differences between using int[][] and int[,]?
我刚看到这个符号:
int[,]
每当我需要我使用的矩阵时:
int[][]
有什么区别?何时使用哪一个?
修改 感谢您的快速回复。我可以想到这一点。对于像这样的东西谷歌也很难。
现在我明白了目的。但它们如何与System.Array相关?
答案 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数组中意外替换整行更难。)