C#高级编程(第10版) C# 6 & .NET Core 1.0 (.NET开发经典名著)
上QQ阅读APP看书,第一时间看更新

7.4 锯齿数组

二维数组的大小对应于一个矩形,如对应的元素个数为3×3。而锯齿数组的大小设置比较灵活,在锯齿数组中,每一行都可以有不同的大小。

图7-4比较了有3×3个元素的二维数组和锯齿数组。图7-4中的锯齿数组有3行,第1行有两个元素,第2行有6个元素,第3行有3个元素。

图7-4

在声明锯齿数组时,要依次放置左右括号。在初始化锯齿数组时,只在第1对方括号中设置该数组包含的行数。定义各行中元素个数的第2个方括号设置为空,因为这类数组的每一行包含不同的元素个数。之后,为每一行指定行中的元素个数:

        int[][] jagged = new int[3][];
        jagged[0] = new int[2] { 1, 2 };
        jagged[1] = new int[6] { 3, 4, 5, 6, 7, 8 };
        jagged[2] = new int[3] { 9, 10, 11 };

迭代锯齿数组中所有元素的代码可以放在嵌套的for循环中。在外层的for循环中迭代每一行,在内层的for循环中迭代一行中的每个元素:

        for (int row = 0; row < jagged.Length; row++)
        {
          for (int element = 0; element < jagged[row].Length; element++)
          {
            WriteLine($"row: {row}, element: {element}, value: {jagged[row][element]}");
          }
        }

该迭代结果显示了所有的行和每一行中的各个元素:

        row: 0, element: 0, value: 1
        row: 0, element: 1, value: 2
        row: 1, element: 0, value: 3
        row: 1, element: 1, value: 4
        row: 1, element: 2, value: 5
        row: 1, element: 3, value: 6
        row: 1, element: 4, value: 7
        row: 1, element: 5, value: 8
        row: 2, element: 0, value: 9
        row: 2, element: 1, value: 10
        row: 2, element: 2, value: 11