购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

7.3 二维数组

视频讲解

二维数组是一种特殊的多维数组,多维数组是指可以用多个索引访问的数组,声明时,用多个中括号([ ])或者在中括号内加逗号,就表明是多维数组,有n个中括号或者中括号内有n个逗号,就是n+1维数组。下面以最常用的二维数组为例讲解多维数组的使用。

7.3.1 二维数组的创建

前文提到快捷酒店每一个楼层都有很多房间,这些房间都可以构成一维数组,如果这个酒店有500个房间,并且所有房间都在同一个楼层里,那么拿到499号房钥匙的旅客可能就不高兴了,从1号房走到499号房要花好长时间,因此每个酒店都不只有一个楼层,而是很多楼层,每一个楼层都会有很多房间,形成一个立体的结构,把大量的房间均摊到每个楼层,这种结构就是二维表结构。在计算机中,二维表结构可以使用二维数组来表示。使用二维表结构表示快捷酒店每一个楼层的房间号的效果如图7.5所示。

二维数组常用于表示二维表,表中的信息以行和列的形式表示,第一个下标代表元素所在的行,第二个下标代表元素所在的列。

图7.5 二维表结构的楼层房间号

二维数组的声明语法如下:

type:二维数组的数据类型。

arrayName:二维数组的名称。

例如,声明一个int类型的二维数组,可以使用下面两种形式:

或者

同一维数组一样,二维数组在声明时也没有分配内存空间,同样可以使用关键字new来分配内存,然后才可以访问每个元素。

对于二维数组,有两种为数组分配内存的方式。

1. 直接为每一维分配内存空间

例如,定义一个二维数组,并直接为其分配内存空间,代码如下:

上面代码创建了一个int类型的二维数组a,二维数组a中包括两个长度为4的一维数组,内存分配如图7.6所示。

图7.6 二维数组内存分配(第一种方式)

2. 分别为每一维分配内存空间

例如,定义一个二维数组,分别为每一维分配内存空间,代码如下:

通过第二种方式为二维数组分配内存如图7.7所示。

图7.7 二维数组内存分配(第二种方式)

说明

在上面的代码中,由于为每一维分配的内存空间不同,因此,a相当于一个不规则二维数组。

7.3.2 二维数组的初始化

二维数组有两个索引(即下标),构成由行列组成的一个矩阵,如图7.8所示。

图7.8 二维数组索引与行列的关系

二维数组的初始化主要分为两种:为单个二维数组元素赋值、为每一维数组元素赋值和同时为整个二维数组赋值,下面分别介绍。

1. 为单个二维数组元素赋值

为单个二维数组元素赋值即首先声明一个二维数组,并指定行数和列数,然后为二维数组中的每个元素进行赋值,例如:

使用这种方式对二维数组进行赋值时,通常使用嵌套的循环实现,例如,上面代码可以修改为:

2. 为每一维数组元素赋值

为二维数组中的每一维数组元素赋值时,首先需要使用“数组类型[ ] [ ]”形式声明一个数组,并指定数组的行数,然后再分别为每一维数组元素赋值。例如:

3. 同时为整个二维数组赋值

同时为整个二维数组赋值时需要使用嵌套的大括号,将要赋值的数据包含在里层大括号中,每个大括号中间用逗号(,)隔开。例如:

或者

或者

以上3种形式实现的效果是一样的,都是定义了一个长度为2行2列的int类型二维数组,并进行了初始化,其中,后两种形式会自动计算数组的行数和列数。

7.3.3 二维数组的使用

【例7.02】 创建一个控制台应用程序,模拟制作一个简单的客车售票系统,假设客车的座位数是9行4列,使用一个二维数组记录客车售票系统中的所有座位号,并在每个座位号上都显示“【有票】”,然后用户输入一个坐标位置,按回车键,即可将该座位号显示为“【已售】”,代码如下: (实例位置:资源包\源码\07\7.02)

说明

第28行代码中用到了字符串的Split方法,该方法用来根据指定的符号对字符串进行分割,这里了解即可,该方法将在第8章进行详细讲解。

程序运行效果如图7.9所示。

图7.9 模拟客车售票系统

7.3.4 不规则数组的定义

前面讲的二维数组是行和列固定的矩形方阵,如4×4、3×2等,另外,C#中还支持不规则的数组,例如,二维数组中,不同行的元素个数完全不同,例如:

上面代码中定义的不规则二维数组所占的内存空间如图7.10所示。

图7.10 不规则二维数组的空间占用 XGegevs38Ziv7KqFWJ5nkBbJXQSMGVB23w/4/zbvsVHRZQu6ykjRI/W4K1atzcjL

点击中间区域
呼出菜单
上一章
目录
下一章
×