C#数组-字符串[][]与字符串[,]的比较

16
5个回答

26
"

string[,]是一个多维数组

"

multidimensional array

string[][] 是一个 Jagged array

一个 Jagged array 是一个元素为数组的数组。Jagged array 的元素可以具有不同的维度和大小。Jagged array 有时被称为“数组的数组”。

Jagged array


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[ ][ ] - 锯齿数组(数组的数组)

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

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

锯齿数组比多维数组更快

声明:

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"} };

看看我如何编辑你的答案,你就会学会如何插入链接... - aleroot

4

string[][]是一个交错数组,其元素也是数组。交错数组的元素可以具有不同的维度和大小。有时候也称为“数组的数组”。

string[,] 则是一个多维数组,其可以拥有多个维度。


2

两个方面的不同很重要:

内存方面:

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

访问方面:

[n,m] - 访问单元格i,j时,实际上是获取[n*m]数组的指针,然后通过n*width+m进行偏移,并访问值。 [n][m] - 要访问单元格i,j,只需访问索引为n(偏移#1)的子数组指针,然后访问索引为m(偏移#1)的子数组。

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

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


1

string[][] (不规则数组) 是由固定行数和可变列长的数组组成,而string[,] (矩形数组) 则是由固定行数和列数的矩阵组成。这里有一个很好的讨论在那里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接