
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 二维数组的遍历