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

14

这两者之间有什么区别:

int [][] myArray;

int [,] myOtherArray;

2
请注意,混合使用两种技术——制作多维数组的不规则数组——是合法的,但几乎肯定是一个坏主意。它会使代码难以阅读。有关详细信息,请参阅我在此主题上的文章。http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx - Eric Lippert
7个回答

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

17

myArray是一个锯齿形数组,也就是一个数组的数组。每个myArray元素本身都是一个int[]

myOtherArray是一个矩形(或多维)数组 - 一个包含所有数据的单个对象。

你应该根据具体情况来选择使用哪种类型的数组。有时为每一行数据使用一个数组可能很方便(可以替换整个行,并且行可以有不同的长度),而在其他情况下强制使用统一的布局则更有意义。


请问您能否详细说明或提供相关资源,以便了解何时使用哪种更为合适? - smartcaveman
3
@smartcaveman:恐怕不是那么容易的事情。优缺点都非常具体化,取决于不同的情况。如果您能给我一个具体的情境,我可以提供一些想法。 - Jon Skeet

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]

2

锯齿数组:

int [][] myArray;

矩形数组:

int [,] myOtherArray;

引用自《C#中的数组——比较矩形和锯齿形数组》

矩形数组和锯齿形数组的结构有很大的不同。

一维数组在CIL中有特定的指令,可以使它们得到优化以提高性能。而矩形数组没有这些指令,无法得到同样的优化。因此,有时使用由一维数组组成的锯齿形数组可能更加高效,因为它们可以得到优化;而使用矩形数组则可能更简单,因为它可以被视为一个单元,而不是一个数组的数组。


2

第一个是锯齿数组,另一个是多维数组 - 区别在于锯齿数组的元素可以具有不同的维度和大小。


0

这应该是一个重复的问题。一个是锯齿形数组,另一个是二维数组。你应该能够从中得到答案。


0

这两个语句都声明了未初始化的多维整数数组。第一个是锯齿形数组,第二个是二维数组。

您可以在声明时同时初始化二维数组,如下所示:

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

或者,

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

请参阅官方文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接