繁体   English   中英

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

[英]What is the difference between these two ways of declaring an array?

有什么区别:

int [][] myArray;

int [,] myOtherArray;

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

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

myArray是一个锯齿状数组或数组数组。 myArray每个元素本身都是一个int[]

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

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

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

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]

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

锯齿状阵列:

int [][] myArray;

矩形阵列:

int [,] myOtherArray;

引用比较矩形和锯齿状数组

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

一维数组在CIL中具有特定指令,允许它们针对性能进行优化。 矩形数组没有这些指令,也没有针对同一级别进行优化。 因此,使用一维数组的锯齿状阵列有时会更有效 - 可以优化矩形阵列,但不能。 另一方面,对于矩形阵列,编程复杂度可以更小,因为它可以被视为单个单元,而不是阵列阵列。

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

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

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

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

要么,

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

请参阅官方文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM