6.3 二维数组的声明和使用

前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C#允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。本节只介绍二维数组,多维数组可由二维数组类推而得到。

6.3.1 二维数组的声明

1. 声明二维数组

二维数组的语法格式如下:

   datatype[,] arrayName;

其中,datatype用于表示二维数组存储数据的类型,arryName用于表示二维数组名。

例如:

   int[,] myIntArray;
   string[,] myStrArray;

2. 初始化二维数组

二维数组的初始化有以下两种形式。

(1)在声明数组时为数组的元素赋初值。

例如:

   int[,] arry = { { 3, 4 }, { 5, 6 } };

(2)可以通过new运算符创建数组并将数组元素初始化为它们的默认值。

例如:

   int[,] arry = new int[2, 2] { { 3, 4 }, { 5, 6 } };

也可以在初始化数组时不指定行数和列数,编译器可以根据初始化的数量来自动计算数组的行数和列数。

例如:

   int[,] arry = new int[, ] { { 3, 4 }, { 5, 6 } };

3. 二维数组的存储形式

C#的二维数组,在本质上是一个一维数组的列表。一个二维数组可以被认为是一个带有i行和j列的表格。声明一个二维数组,包含3行和4列,它在内存中的形式如图6-4所示。

因此,数组中的每个元素是使用形式为a[i,j]的元素名称来标识的,其中,a是数组名称,i和j是唯一标识a中每个元素的下标。

图6-4 二维数组的存储形式

4. 二维数组的赋值

二维数组可以通过在括号内为每行指定值来进行赋值。下面是一个带有3行4列的数组。

二维数组中的元素是通过使用下标(即数组的行和列)来访问,并为其赋值的。

例如:

   a[2, 1] = 25;

同样,以下实例将获取特定数组元素的值并将其赋予变量Value。

   int Value = a[2, 1];

6.3.2 二维数组的使用

对于二维数组,遍历元素的方式是首先增加最右边维度的索引,然后是它左边的一个维度,以此类推,向左遍历元素。二维数组的元素也可以通过for语句和foreach语句来进行遍历。

例6-3】编写程序,对一个二维数组进行遍历。

(1)在Visual Studio 2017中,新建名称为“Project3”的文件。

(2)在代码编辑区域输入以下代码。

【程序分析】本例演示二维数组的遍历。在代码中,首先声明一个二维数组a,并使用new关键字为其分配空间,接着对它进行初始化;然后再定义两个整型变量i和j,用于表示二维数组的行和列;最后,通过嵌套的for循环输出该二维数组。

在Visual Studio 2017中的运行结果如图6-5所示。

图6-5 二维数组

例6-4】编写程序,使用foreach语句遍历一个二维数组。

(1)在Visual Studio 2017中,新建名称为“Project4”的文件。

(2)在代码编辑区域输入以下代码。

【程序分析】在代码中,首先声明一个二维数组a,并使用new关键字为其分配空间,接着对它进行初始化,然后使用foreach语句输出该数组。

在Visual Studio 2017中的运行结果如图6-6所示。

图6-6 foreach语句遍历二维数组

6.3.3 动态二维数组的声明及使用

所谓动态数组,就是指程序在运行过程中将数组的定义部分和初始化部分分别写在不同的语句中。动态数组的初始化也需要使用关键字new为数组元素分配内存空间,并为数组元素赋初值。

1. 声明

声明动态数组的语法格式如下:

   type[,] arrayName;
   arrayName = new type[n1,n2];

其中,arrayName为数组名;type用于表示数组的数据类型;n1和n2为数组长度,可以是整型的常量或变量,它们分别表示一维数组的长度和二维数组的长度;new关键字仍然以默认值来初始化数组元素。

2. 初始化

声明一个动态的二维数组:

这里需要注意,x和y可以为任意值。

例6-5】编写程序,用户输入一个二维数组的行数和列数,然后遍历出该数组。

(1)在Visual Studio 2017中,新建名称为“Project5”的文件。

(2)在代码编辑区域输入以下代码。

【程序分析】本例演示了动态二维数组的使用。在代码中,首先定义两个整型变量x和y,分别用于表示行数和列数;然后将键盘上输入的数据转换为整型数据并赋给变量x和y,这样就得到了行数和列数的确定值;接着使用关键字new为数组arr分配x行y列的空间;最后通过for循环将数组的行索引和列索引以字符串的形式合并在一起,作为动态二维数组的元素值输出。

在Visual Studio 2017中的运行结果如图6-7所示。

图6-7 动态二维数组