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

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

这里的区别在于第一个样本int [] []创建一个锯齿状数组 ,而第二个样本创建一个矩形数组 (维度为2)。 在锯齿状arrays中,每个“列”可以具有不同的大小。 在真正的多维数组中,每个“列”(在一个维度中)的大小相同。 有关更完整的信息,请参阅C#编程指南的“ arrays”部分 。

这是一个很好的比较

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

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

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

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

每个都有它们的用途取决于你想要完成的。

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

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

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];

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

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

理解差异的最佳方法是查看两种创建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循环来完全创建它。 它通常被称为锯齿状数组,因为二阶数组不需要具有相同的长度。

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

此外,如果一个对象获得> 85,000字节,它将转到LOH(大对象堆)。 .NET集合和大对象堆(LOH)

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

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