锯齿状数组是包含原始数组(或其他集合)的数组,而不是原始类型。这就像一个数组数组-每个数组元素都包含另一个数组。
它们类似于多维数组,但有细微差别-由于多维数组限于固定数量的行和列,而锯齿状数组的每一行可以具有不同数量的列。
声明锯齿状数组
例如,声明一个具有8列的锯齿状数组:
int[][] a = new int[8][];
第二个[]没有数字初始化。要初始化子数组,您需要分别进行:
for (int i = 0; i < a.length; i++) { a[i] = new int[10]; }
获取/设置值
现在,获得子阵列之一很容易。让我们打印第3列的所有数字a:
for (int i = 0; i < a[2].length; i++) { Console.WriteLine(a[2][i]); }
获得特定值:
a[<row_number>][<column_number>]
设置特定值:
a[<row_number>][<column_number>] = <value>
切记:始终建议使用锯齿状的数组(数组的数组),而不是多维数组(矩阵)。使用起来更快,更安全。
注意括号的顺序
考虑的一维数组的五维数组的三维数组int。这是用C#编写的:
int[,,][,,,,][] arr = new int[8, 10, 12][,,,,][];
在CLR类型系统中,括号排序的约定是相反的,因此在上述arr实例中,我们有:
arr.GetType().ToString() == "System.Int32[][,,,,][,,]"
同样:
typeof(int[,,][,,,,][]).ToString() == "System.Int32[][,,,,][,,]"