C#Arrays – string vs string

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

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

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

多维数组

string[][]是一个Jagged数组 :

锯齿状数组是一个数组,其元素是数组。 锯齿状arrays的元素可以具有不同的尺寸和大小。 锯齿状数组有时被称为“数组数组”。

锯齿状阵列

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

多维可以有多个维度。 以下示例显示如何创建两行和两列的二维数组。

宣言 :

 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[ ][ ] – Jagged Array (数组数组)

锯齿状数组是一个数组,其元素是数组。 锯齿状arrays的元素可以具有不同的尺寸和大小。 锯齿状数组有时被称为“数组数组”。

锯齿状arrays可以有效地存储许多不同长度的行。 可以使用任何类型的数据,参考或值。 索引锯齿状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"} }; 

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

锯齿状数组是一个数组,其元素是数组。 锯齿状arrays的元素可以具有不同的尺寸和大小。 锯齿状数组有时被称为“数组数组”。

string[,]是一个多维数组

数组可以有多个维度

差异的两个方面很重要:

内存明智的:

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

访问明智的:

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

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

然而,[,]有一个优点:你总是知道矩阵的宽度是固定的。 使用[] [],每个子数组可以有不同的长度,甚至可以为空。 这可以被认为是一个优点,尽管反过来也有用。

string[][] (Jagged Arrays)是具有固定行数和可变列长度的数组数组 string[,]string[,] (Rectangular Arrays)是具有固定行数和列数的矩阵。 那边有一个很好的讨论