"true"多维数组的定义是什么,哪些语言支持它们?



我读过的大多数编程书都有这样一行:

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

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

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

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)

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("LastnametFirstnametLocationn");
 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");
 }

不用浏览Sun和Microsoft网站上的大量文献,这是我在C时代的记忆。希望这对你有所帮助。

为了简单起见,如果我们只考虑二维——数组既可以表示为二维数组,也可以表示为指针数组。在代码中,这相当于int x [15] [20];int * 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个元素,第二个元素可以指向3个元素,第三个元素可以指向0个元素,以此类推。

劣势:

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

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

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

多维数组称为array,而"一维"数组称为Vector。

相关内容

  • 没有找到相关文章

最新更新