锯齿数组是数组的数组。锯齿数组存储数组而不是字面值。比如二维数组,是多个相同元素的一维数组,但是锯齿数组,下面每个数组的元素的个数不一样。
锯齿数组用两个方括号[] []初始化。第一个括号指定了数组的大小,第二个括号指定了将要存储的数组的大小。
以下示例声明了锯齿数组。
int[][] jArray1 = new int[2][]; // 可以包含两个一维数组 int[][,] jArray2 = new int[3][,]; // 可以包含三个二维数组
在上面的示例中,jArray1最多可以存储两个一维数组。jArray2最多可以存储三个二维数组,数组[,]指定二维数组。
int[][] jArray = new int[2][]; jArray[0] = new int[3]{1, 2, 3}; jArray[1] = new int[4]{4, 5, 6, 7 };
您还可以在声明时初始化锯齿数组,如下所示。
int[][] jArray = new int[2][]{ new int[3]{1, 2, 3}, new int[4]{4, 5, 6, 7} }; jArray[0][0]; //返回1 jArray[0][1]; //返回2 jArray[0][2]; //返回3 jArray[1][0]; //返回4 jArray[1][1]; //返回5 jArray[1][2]; //返回6 jArray[1][3]; //返回7
您可以使用两个for循环访问一个锯齿的数组,如下所示。
int[][] jArray = new int[2][]{ new int[3]{1, 2, 3}, new int[4]{4, 5, 6, 7} }; for(int i=0; i<jArray.Length; i++) { for(int j=0; j < (jArray[i]).Length; j++) Console.WriteLine(jArray[i][j]); }
下面的锯齿数组存储二维数组,其中第二个括号[,]表示二维数组。
int[][,] jArray = new int[2][,]; jArray[0] = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } }; jArray[1] = new int[2, 2] { { 7, 8 }, { 9, 10 } }; jArray[0][1, 1]; //返回4 jArray[1][1, 0]; //返回9 jArray[1][1, 1]; //返回10
如果你再加一个括号,那么它就是数组的数组。
int[][][] intJaggedArray = new int[2][][] { new int[2][] { new int[3] { 1, 2, 3}, new int[2] { 4, 5} }, new int[1][] { new int[3] { 7, 8, 9} } }; Console.WriteLine(intJaggedArray[0][0][0]); // 1 Console.WriteLine(intJaggedArray[0][1][1]); // 5 Console.WriteLine(intJaggedArray[1][0][2]); // 9
在上面的交错数组示例中,三个方括号[][][]表示数组的数组的数组。因此,intJaggedArray将包含两个元素,这意味着两个数组。现在,每个数组还包含一个数组(一维)。intJaggedArray[0][0][0]指向第一个内部数组的第一个元素。intJaggedArray[1][0][2]指向第二个内部数组的第三个元素。下图说明了这一点。