位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 数组的数组

提问人:刘团圆发布时间:2020-12-04

    多维数组可称为矩形数组,这是因为每一行的元素个数都相同。任何一个 x坐标都有一个对应0至3的y坐标。

    也可以使用锯齿数组Gagged array),其中每行的元素个数可能不同。为此,需要有这样一个数组,其中的每个元素都是另一个数组。也可以有数组的数组的数组,甚至更复杂的数组。但是,注意这些数组都必须有相同的基本类型。


声明数组的数组时,其语法要求在数组的声明中指定多个方括号对,例如:

    int[][] jaggedlntArray;

但初始化这样的数组不像初始化多维数组那样简单,例如,不能采用以下声明方式:

    jaggedlntArray = new int[3][4];

即使可以这样做,也不是很有效,因为使用简单的多维数组可以较为轻松地取得相同的结果。也不能使用下面的代码:

    jaggedlntArray ={{1,2,3}, {1}, {1,2}};

有两种方式:可以初始化包含其他数组的数组(为清晰起见,称其为子数组),然后依次初始化子数组。

    jaggedlntArray = new int[2][]; 

    jaggedlntArray[0] = new int[3]; 

    jaggedlntArray[1] = new int[4];

也可以使用上述字面值赋值的一种改进形式:

    jaggedlntArray = new int[3][] { new int [] { 1, 2, 3 }, new int[] { 1 },

                                    new int[] { 1, 2 } };

也可以进行简化,把数组的初始化和声明放在同一行上,如下所示:

    int[][] jaggedlntArray = { new int[] { 1, 2, 3 }, new int[] { 1 },

                               new int[] { 1,2 } };

可对锯齿数组使用foreach循环,但通常需要使用嵌套的foreach循环才能得到实际数据。例如,假定下述锯齿数组包含10个数组,每个数组又包含一个整数数组,其元素是1〜10的约数:

int[][] divisorslTo10 = {new int[] { 1 },

                         new int[] { 1, 2 },

                         new int[] { 1, 3 },

                         new int[] { 1, 2, 4 },

                         new int[] { 1, 5, },

                         new int[] { 1, 2, 3, 6 },

                         new int[] { 1, 7 },

                         new int[] { 1, 2, 4, 8 },

                         new int[] { 1, 3, 9 },

                         new int[] { 1, 2, 5, 10 } };

以下代码会失败:

foreach (int divisor in divisorslTo10)

{

    WriteLine(divisor);

}

这是因为数组divisorelTolO包含的是int[]元素而不是int元素。正确的做法是循环遍历每个子数组和数组本身:

foreach (int[] divisorsOfInt in divisorslTolO)

{

    foreach(int divisor in divisorsOfInt)

    {

        WriteLine(divisor);

    }

}

可以看出,使用锯齿数组的语法要复杂得多!大多数情况下,使用矩形数组比较简单,这是一种比较简单的存储方式。但是,有时必须使用锯齿数组,所以知道如何使用它们是没有坏处的。一个例子是,使用XML文档时,其中一些元素有子元素,而一些元素没有。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部