9

我读过的大多数编程书籍都有以下内容:

“X 语言不支持真正的多维数组,但你可以用数组的数组模拟(近似)它们。”

由于我的大部分经验都是使用基于 C 的语言,即 C++、Java、JavaScript、php 等,我不确定什么是“真正的”多维数组。

真正的多维数组的定义是什么,哪些语言支持它?另外,如果可能,请在代码中显示一个真正的多维数组的示例。

4

4 回答 4

8

C# 支持真正的多维数组和可以替代的“锯齿状”数组(数组的数组)。

// jagged array
string[][] jagged = new string[12][7];

// multidimensional array
string[,] multi = new string[12,7];

锯齿状数组通常被认为更好,因为它们可以做多维数组可以做的所有事情,甚至更多。在锯齿状数组中,您可以使每个子数组具有不同的大小,而在多维数组中则不能这样做。甚至有这样的代码分析规则(http://msdn.microsoft.com/en-us/library/ms182277.aspx

于 2011-11-18T05:16:44.183 回答
0

Java 也使用它们

int[][] a2 = new int[10][5];

这是我发现的一个有趣的用法

String[][] Data;

 //Assign the values, do it either dynamically or statically
 //For first fow
 Data[0][0] = "S"; //lastname
 Data[0][1] = "Pradeep"; //firstname
 Data[0][2] = "Kolkata"; //location

 //Second row
 Data[1][0] = "Bhimani"; //lastname
  Data[1][1] = "Shabbir"; //firstname
  Data[1][2] = "Kolkata"; //location

 //Add as many rows you want

 //printing
 System.out.print("Lastname\tFirstname\tLocation\n");
 for(i=0;i<2;i++)
 {
   for(j=0;j<3;j++)
   {
     System.out.print(Data[i][j]+"\t");
   }
   //move to new line
   System.out.print("\n");
 }
于 2011-11-18T05:15:23.790 回答
0

无需阅读 Sun 和 Microsoft 网站上的大量文献,这就是我在 C 时代的记忆。希望这可以帮助。

为了简单起见,如果我们只考虑二维 - 数组可以表示为二维数组和指针数组。在代码中,这相当于 int x[15][20]; 整数 *y[15];

在此示例中,x[5][6] 和 b[5][6] 在语法上都是有效的,并且最终引用了单个 int。

话虽如此,x 是一个真正的二维数组:一旦创建它,​​就会有 300 个位置(可以包含 int)被留出,您可以使用众所周知的下标约定来访问这个矩形(使用15 行和 20 列)数组,您可以通过计算 (20 * row) + col 得到 x[row,col]。

然而,在 y 的情况下,在定义结构时,仅分配了 15 个指针,但未初始化。(初始化需要明确地完成)

这种方法有优点和缺点(指针数组或“数组数组”或锯齿状数组,因为它被称为):

优势:

这个数组的行可以有不同的长度,即 y 的每个元素不需要指向一个有 20 个元素的 ROW;一个元素可能指向 2 个元素,第 2 个元素可能指向 3 个元素,第 3 个元素可能指向 0 个元素,依此类推。

坏处:

然而,在最好的情况下,如果 y 的每个元素都指向一个有 20 个元素的数组,那么将留出 300 个整数位置,再加上 10 个用于指针的单元格,这是额外的。

从当前示例的角度来看,上面给出的升 C 示例(在之前的一篇文章中)应该足够了。

于 2011-11-18T05:52:34.020 回答
0

Common Lisp 支持这两种类型的数组。

多维数组称为 Array,而“一维”数组称为 Vector。

于 2017-10-27T20:16:47.963 回答