可能重复:
What are the differences between using int[][] and int[,]?int [] []和int [,]之间的区别是什么?
我只是碰到这种表示法来:
int[,]
每当我需要一个矩阵我用:
int[][]
有什么区别?何时使用哪一个?
编辑: 感谢您的快速回复。我可以想到这一点。谷歌也很难像这样的东西。
现在我明白了目的。但它们与System.Array有什么关系?
可能重复:
What are the differences between using int[][] and int[,]?int [] []和int [,]之间的区别是什么?
我只是碰到这种表示法来:
int[,]
每当我需要一个矩阵我用:
int[][]
有什么区别?何时使用哪一个?
编辑: 感谢您的快速回复。我可以想到这一点。谷歌也很难像这样的东西。
现在我明白了目的。但它们与System.Array有什么关系?
int[,]
是矩形阵列 - 其具有两个维度一个对象。数组中的每个元素都是一个整数;所有元素都连续存储在内存中。
int[][]
是锯齿状数组 - 其中每个元素依次为int[]
。 (所以它是一个数组数组。)尽管“顶级”数组的每个元素都是连续存储的,但这些元素只是对其他数组的引用,这些数组可能在内存中的任何位置。
虽然矩形数组每行总是具有相同的列数,但在锯齿形数组中,每个元素可以具有不同的长度(或者实际上可以为空)。
各有各的优缺点;矩形阵列在记忆方面更加紧凑,但不允许稀疏人群。 Jagged数组在CLR中速度更快,但没有良好的缓存一致性。在某些情况下,锯齿阵列中“行阵列”所占用的额外空间可能很重要 - 如果您有一个仅占用80000字节加上一个数组对象开销的int[10000, 2]
,而在锯齿状阵列中则是80000字节的数据和10001数组对象的开销。
MSDN在其arrays tutorial中有更多的信息。
第一个是偶数(每行包含相同数量的元素的) 第二个是锯齿状(每一行可包含不同数量的元件)
换一种方式,第一个是多维数组 - 矩形数组。第二个是一个数组的数组(并因此,每个单独的阵列可以是不同的长度。)
int[x,y]
是具有固定尺寸的二维阵列(例如int[4,5]
)。
int[][]
是一个锯齿形数组,它表示它是一个数组数组,每个数组可以有不同数量的元素。
对于创建矩阵,int[,]
更容易。锯齿阵列int[][]
需要更多的工作(您需要一个额外的循环到setup the complete matrix)。
但是你可能仍然想考虑int[][]
,因为它是faster。
正如其他人所提到的,int[,]
是一个多维/矩形阵列,而int[][]
是一个数组或数组“锯齿”数组。
至于什么时候使用一个,int[][]
可能是一个痛苦的设置(每行都必须创建),但它似乎总是快一点。 int[,]
的优势在于它更简单,并且执行规则,这使得它在您需要时非常有用。 (更换二维数组中的整行比使用数组阵列更难。)
这是我读过的最好的答案(不管问题)。 – 2012-05-05 05:08:29