16

可能重复:
C# 中的多维数组和数组数组有什么区别?

谁能解释一下string[][]和之间的区别string[,]

4

5 回答 5

26

string[,]是一个多维数组

多维数组

string[][]是一个锯齿状数组

锯齿状数组是其元素为数组的数组。锯齿状数组的元素可以具有不同的维度和大小。锯齿状数组有时称为“数组数组”。

锯齿状阵列

于 2012-10-06T07:07:43.760 回答
6

string[,]-多维数组(矩形数组)

多维可以有多个维度。下面的例子展示了如何创建一个两行两列的二维数组。

宣言 :

string[,] contacts;

实例化:

string[,] contacts = new string[2,2];

初始化:

string[,] contacts = new string[2, 2] { {"John Doe","johndoe@example.com"}, {"Jane Doe","janedoe@example.com"} };



string[ ][ ]-锯齿状阵列(Array-of-arrays)

锯齿状数组是其元素为数组的数组。锯齿状数组的元素可以具有不同的维度和大小。锯齿状数组有时称为“数组数组”。

锯齿状数组可以有效地存储许多不同长度的行。可以使用任何类型的数据、引用或值。索引锯齿状数组很快。分配它们有点慢。

锯齿状数组比多维数组快

宣言 :

string[][] contacts;

实例化:

string[][] contacts = new string[2][];
for (int i = 0; i < contacts.Length; i++) 
{
   contacts[i] = new string[3];
}

初始化:

string[][] contacts = new string[2][] { new string[] {"john@example.com","johndoe@example.com"}, new string[] {"janedoe@example.com","jane@example.com","doe@example.com"} };
于 2012-10-06T07:07:05.957 回答
4

string[][]作为锯齿状数组

锯齿状数组是其元素为数组的数组。锯齿状数组的元素可以具有不同的维度和大小。锯齿状数组有时称为“数组数组”。

而是string[,]一个多维数组

数组可以有多个维度

于 2012-10-06T07:07:52.120 回答
2

差异的两个方面很重要:

内存方面:

[n,m] - 保存为一长串内存,就好像它是 [n*m] [n][m] - 保存为大小为 n 的简单数组,其中每个元素都是指向大小数组的指针米。

访问方式:

[n,m] - 要访问单元格 i,j,真正发生的是它获取 [n*m] 数组的指针并将其偏移 n*width+m,然后访问该值。[n][m] - 要访问单元格 i,j,您只需访问索引 n(偏移量 #1)处的子数组指针,然后访问索引 m(偏移量 #1)处的子数组。

[][] 两方面都比较好。访问效率更高,内存更灵活。此外,您可以只访问单行一次并更有效地处理它,因为您不会对该行中的每个单元格执行完整的多维访问。

但是,[,] 有一个优点:您始终知道矩阵的宽度是固定的。使用 [][],每个子数组可以有不同的长度,甚至可以为空。这可以被认为是一个优势,尽管有时相反也可能有用。

于 2012-10-06T07:13:51.267 回答
1

string[][] (锯齿状数组)是具有固定行数和可变列长度的数组,而string[,] (矩形数组)是具有固定行数和列数的矩阵。那边有很好的讨论

于 2012-10-06T07:09:51.523 回答