来自perl背景,我总是使用int[][]
定义一个2D数组。我知道你可以使用int[,]
代替那么有什么区别?
答案 0 :(得分:29)
这里的区别在于第一个样本int [] []创建jagged array,而第二个样本创建rectangular array(维度2)。在锯齿状阵列中,每个“列”可以具有不同的大小。在真正的多维数组中,每个“列”(在一个维度中)的大小相同。有关更完整的信息,请参阅Array section的C# Programming Guide。
答案 1 :(得分:12)
基本上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 [])是一个对象