要注意多维数组和嵌套数组二者之间的区别,嵌套数组也叫数组的数组,或者交错数组。通过以下方式来声明变量:
int[3][2] arr;
就是数组中的每个元素也是数组,也就是数组里面也包含数组。如:
//嵌套数组
char[][] ccs = new char[][]
{
new char[]{'a','b'},
new char[]{'c','d'},
new char[]{'e','f','g'}
};
在上面的代码中,声明了一个嵌套数组,该数组从外到内有两层,最外层包含三个元素,而每个元素又是一个char数组。第一个char数组包含两个元素,第二个char数组也包含了两个元素,第三个char数组则包含了三个元素。
嵌套数组要比多维数组复杂,它是从外向内一层一层地进行嵌套。其实我们在声明嵌套数组时,可以通过中括号的对数来确定嵌套数组所包含的层数。例如,int[][]表示该数组包含两个层数组,int[][][]则表示其中包含三层数组。
下面用一个示例来演示一个三层嵌套的数组,嵌套数组变量的声明如下:
//三层嵌套的数组
int[][][] ints = new int[3][][]
{
new int[2][]
{
new int[]{20,32,2},
new int[]{1,11,29,6}
},
new int[2][]
{
new int[]{27,26,17},
new int[]{199}
},
new int[2][]
{
new int[]{40,74,81},
new int[]{120,95}
}
};
该数组有三个层次(int[][][]),第一层有三个元素,每个元素又是一个两层嵌套的数组(int[][]);然后第二层中每个元素又是一个数组(int[]);到了第三层才是单个int数值。
然后,把这个嵌套数组的所有元素输出到屏幕。
System.Console.WriteLine(ints.GetType().Name);
for(int i = 0;i<ints.Length;i++) //第一层
{
System.Console.WriteLine(" "+ints[i].GetType().Name);
for(int j = 0;j<ints[i].Length;j++) //第二层
{
System.Console.WriteLine(" "+ints[i][j].GetType().Name);
Console.Write(" ");
for(int k = 0;k<ints[i][j].Length;k++) //第三层
{
System.Console.Write(ints[i][j][k] + " ");
}
System.Console.WriteLine();
}
}
输出如下:
Int32[][][]
Int32[][]
Int32[]
20 32 2
Int32[]
1 11 29 6
Int32[][]
Int32[]
27 26 17
Int32[]
199
Int32[][]
Int32[]
40 74 81
Int32[]
120 95
其实,嵌套数组的结构有些类似于Windows操作系统中的文件目录结构,把嵌套数组的层次与系统中的文件夹层次作类比。从外向内层层嵌套,而最后一层便是数组中的单个元素,类似于文件夹内部的单个文件。在实际开发过程中很少会使用嵌套数组,也不建议使用,如果对嵌套数组的层次结构理解不清楚的话,很容易造成不必要的错误;况且,为了方便他人阅读代码,也不宜将数组结构定义得过于复杂。
可查看另一篇博客:锯齿数组