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)是具有固定行数和列数的矩阵。 那边有一个很好的讨论