这两种声明数组的方式有什么区别?

时间:2011-03-22 18:40:04

标签: c#

有什么区别:

int [][] myArray;

int [,] myOtherArray;

7 个答案:

答案 0 :(得分:21)

第一个是锯齿状数组:一个数组,其中数组中的每个项目是另一个数组

int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

第二个是多维数组,也就是矩阵。

int[,] array = new int[4, 2]; // create a 4 by 2 matrix

答案 1 :(得分:17)

myArrayjagged array或数组数组。 myArray的每个元素本身都是int[]

myOtherArrayrectangular (or multidimensional) array - 一个直接包含所有数据的对象。

你应该使用哪种取决于具体情况。有时,为每个“行”数据创建一个数组(能够替换整行,并且具有不同长度的行)可能很方便,而在其他时候强制统一布局是有意义的。

答案 2 :(得分:9)

我发现理解它的最好方法是看到它的图形表示=)

int[][] jagged = new int[3][];
jagged[0] = new int[1];
jagged[1] = new int[2];
jagged[2] = new int[4];

将会是这样的

[0] - [0]
[1] - [0][1]
[2] - [0][1][2][3]

虽然是二维的

int[,] twodimensional = new int[3,4]

将会是这样的

[0,0][0,1][0,2][0,3]
[1,0][1,1][1,2][1,3]
[2,0][2,1][2,2][2,3]

答案 3 :(得分:2)

第一个是锯齿状阵列,另一个是多维 - 不同之处在于锯齿状阵列的元素可以具有不同的尺寸和大小。

答案 4 :(得分:1)

锯齿状阵列:

int [][] myArray;

矩形阵列:

int [,] myOtherArray;

引用Comparing Rectangular and Jagged Arrays

  

矩形和矩形的结构   锯齿状阵列很明显   不同。

     

一维数组具有特定性   CIL中允许的说明   它们将针对性能进行优化。   矩形阵列没有这些   说明,并没有优化   同一水平。因此,它   有时可以更有效地使用   锯齿状的一维阵列   数组 - 可以优化 -   矩形阵列,不能。上   另一方面,编程   a的复杂性可能更低   矩形阵列,因为它可以   作为一个单元,而不是   数组数组。

答案 5 :(得分:0)

这必须是重复的。一个是锯齿状阵列,一个是二维阵列。你应该可以从那里拿走它。

答案 6 :(得分:0)

两个语句都声明了未初始化的多维int数组。第一个是锯齿状阵列,第二个是二维阵列。

您可以在声明它的同时初始化二维数组:

int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

OR,

int[,] array = new int[4, 2];

请参阅官方documentation