使用int [] []和int [,]之间有什么区别?

时间:2009-07-21 13:35:49

标签: c# .net multidimensional-array

来自perl背景,我总是使用int[][]定义一个2D数组。我知道你可以使用int[,]代替那么有什么区别?

9 个答案:

答案 0 :(得分:29)

这里的区别在于第一个样本int [] []创建jagged array,而第二个样本创建rectangular array(维度2)。在锯齿状阵列中,每个“列”可以具有不同的大小。在真正的多维数组中,每个“列”(在一个维度中)的大小相同。有关更完整的信息,请参阅Array sectionC# Programming Guide

答案 1 :(得分:12)

Here's a good comparison

基本上int [] []是一个“锯齿状”数组,它看起来像这样:

[] -> [1, 2, 3]
[] -> [1, 2]
[] -> [1, 2, 3, 4]

虽然int [,]是一个多维数组,它总是具有相同的宽度和高度:

[1, 2, 3, 4
 5, 6, 7, 8
 9, 1, 2, 3]

每个人都有自己的用途,取决于你想要完成的任务。

答案 2 :(得分:9)

int [] []是一个数组数组或“锯齿状”数组:当你想在第二个维度中使用不同的大小时,可以使用它。例如,第一个子阵列可以有5个元素,第二个子阵列可以有42个元素。

int [,]是一个二维数组:第二个维度在整个数组中是相同的。对于int [7,42],所有7行的第二维度为42。

答案 3 :(得分:4)

int [] []是一个锯齿状数组,其中int [,]是一个二维数组。

明白

var a = int[][]

允许你有这样的数组:

a[0] = new int[2];
a[1] = new int[5];

与int [,]一样,你必须始终让数组的第二部分相同:

var a = int[2,2];

a[0,0]
a[0,1]
a[1,0]
a[1,1]

你不能拥有[2,2];

答案 4 :(得分:3)

int [] []被称为数组数组,每行可以有任意长度。

int [,]称为矩形数组,其中所有行的长度相同。它可以由第一个模拟。

答案 5 :(得分:1)

理解差异的最佳方法是查看两种创建nxn矩阵的方法:

const int n = 8, m = 8;

int[,] matrix1 = new int[n,m];

int[][] matrix2 = new int[n][];
for (int i = 0; i < matrix2.Length; i++) { matrix2[i] = new int[m]; }

matrix1[1,1] = matrix2[2][2];

正如您所看到的那样,第二个涉及更多,因为您需要for循环来完全创建它。它通常被称为锯齿状数组,因为二阶数组不需要具有相同的长度。

答案 6 :(得分:0)

关于锯齿状数组要考虑的一件事是你要分配非连续的内存块。如果你有大量的大型对象,这是一件好事。我见过SomeThing [n,n]创建StackOverflow问题,但SomeThing [n] [n]没问题。

此外,如果对象获得&gt;它转到LOH(大对象堆)的85,000个字节。 .NET Collections and the Large Object Heap (LOH)

答案 7 :(得分:0)

Here是关于数组的优秀文章,非常适合这个主题。

答案 8 :(得分:0)

你可以看到int [] []和(int [])[] (int [])是一个对象