C#实践教程(第2版)
上QQ阅读APP看书,第一时间看更新

4.3 二维数组

数学中有着一维直线、二维平面和三维的立体图形等,程序中的数组也有着一维、二维和多维。一维数组是单个数据的集合,而二维数组相当于是一维数组的数组,即数组成员为一维数组。本节介绍二维数组的概念及其使用。

4.3.1 二维数组简介

一维数组是一列数据,而二维数组可构成一个有着行和列的表格。同样是二月的28天,使用一维数组可以添加28个数据,而使用二维数组可以显示有着4个周的列表:4行7列,每一行都是一个周,如图4-1所示。

图4-1 日历

有着行和列的二维数组又称作矩阵,如同矩形一样有着长和宽。二维数组有着行和列,它的声明与一维数组类似,不同点在于:一维数组只需要指定数组的总长度,而二维数组需要分别指定行和列的长度。

二维数组中,行和列的长度同样放在中括号中声明,不同的是,二维数组中括号内有1个逗号,将中括号[]分为两部分,分别描述行和列。逗号的前面表示行的长度;后面表示列的长度。如声明一个3行4列的整型二维数组num,格式如下:

int[,] num=new int[3,4];

二维数组同一维数组一样可以直接赋值,每个元素同样使用逗号隔开,如定义一个二维数组num并赋值,格式如下:

int[,] num={
          {2,3,8,10},
          {1,4,6,11},
          {5,7,9,12},
       };

这是一个有着3行4列的数组,它有着12个元素,将数组num表示为列表的形式如下所示:

2 3 8 10
1 4 6 11
5 7 9 12

同一维数组一样,二维数组也可以使用索引来访问单个元素,并且从0开始。不同的是,二维数组用行和列两种索引来确定一个元素,如访问数组num第一行第二个元素,即访问的是num[0,1]。规则如下:

□ 行号与列号之间用逗号隔开。

□ 行号与列号都从0开始编号。

□ 除了直接赋值的数组,数组需要使用new初始化才能使用,用法与一维数组一样。

4.3.2 二维数组遍历

二维数组的遍历同一维数组一样,使用循环语句。但二维数组是有着行和列的,可使用循环嵌套语句,一行一行地访问;或使用foreach in语句依次访问。

使用foreach in语句访问二维数组,首先访问首行数据,一行结束后,访问下一行,直到最后一行最后一列。如使用for循环语句嵌套,来为3行4列的数组赋值,并使用foreach in语句来遍历输出,如练习4-12所示。

【练习4-12】

二维数组num、有3行4列,使用for循环将数组中的元素从1到12赋值,并遍历输出,代码如下:

int[,] num = new int[3, 4];
int numValue = 0;
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 4; j++)
    {
        num[i, j] = numValue;
        numValue++;
    }
}
foreach (int sco in num)
{
    Console.Write("{0} ", sco);
}

执行结果如图4-2所示。一维数组和二维数组的遍历,都是将其所有成员访问一遍,且使用foreach in语句访问,没有行和列的概念。

图4-2 二维数组的遍历