第5章存储多个同类型的数据——数组与集合
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
◦ Dim intA As Array = New Integer(9){ }
Array类的常用属性与方法
Rank属性返回数组的维数。 Length属性返回数组的元素总数。
GetLength 方法返回指定维度的长度。 GetUpperBound方法返回指定维度的最大索引 值。每个维度的最小索引值始终为0。 Sort方法对数组的元素进行排序。 Reverse方法方法用于反转一维数组中的元素 顺序。 Copy方法用于在数组之间复制元素,并自动 处理强制类型转换。
5.6 使用集合代替数组 5.6.1 Visual Basic中的集合
VB.NET提供Collection类,位于 Microsoft.VisualBasic命名空间,可 以用于定义和创建自己的集合。下面是 一个创建集合的例子。
数组的维数
数组可以是一维或者多维的。 维是一个方向,可以在此方向上改变数 组元素的规范。
◦ 例如,保存月内每日总销量的数组有一个 维(当月日期)。 ◦ 而保存每个部门的月内每日总销量的数组 则有两个维(部门编号和当月日期)。
数组的维数也称为数组的秩。
一维数组
一维数组只有一个下标。
二维数组
例子
下面代码声明了一个整型的含有10个元 素的一维数组。 Dim intA(9)As Integer
在VB.Net中,将数组作为对象看待,因 此数组可以在声明时不指明其长度,而 是在使用之前使用New关键字创建,分 配相应的内存空间,其语法格式如下。
◦ Dim 数组名( ) As Integer ◦ 数组名=New 类型名(下标上界){ }
随着数组维数的增多,数组包含的元素 个数也急剧增多,所需的存储空间也急 剧增,因此在使用多维数组时需要谨慎 。一般常用数组为一维和二维数组,超 过三维以上的数组比较少用到。 三维数组,甚至N维数组的声明、创建 、使用、初始值设定项等均与一维、二 维数组类似,区别仅在于下标个数的不 同。
5.4
章节内容
5.1 5.2 5.3 5.4 5.5 5.6
什wk.baidu.com是数组 一维数组 多维数组 动态数组 Array类 使用集合代替数组
5.1
什么是数组
以存储全班60个学生的成绩为例。在数 学中,对于这样的一个数字序列,常会 用这样的方法表示:S1,S2,S3,…… ,S60。 显然,对于这样一批同类型的数据来说 ,完全可以只取一个名称S,然后使用 下标来区分它们。
区分数组对象和数组变量
数组变量保存指向数组对象的指针,而 数组变量一旦声明,就不能再更改它的 秩或元素数据类型。但是,在数组变量 的生存期内,可以将一系列不同的数组 对象分配给它,这些数组对象可以具有 不同的维长度。 数组对象保存的是数组元素、秩和长度 信息,数组对象一旦创建,就不能再更 改它的维数、维长度或元素的数据类型 ,只能更改其元素的内容
第5章 存储多个同类型的数 据——数组与集合
第3章中介绍了变量,使用变量可以存储数值。然而,当需 要存储同一类型的多个数值时,单个变量就无法胜任了。 例如,存储全班60个学生某一门课的成绩,也可以声明60 个Double类型的变量来存储。但是,采用这种方法,需要 记忆所有变量的名称,并且处理起来相当繁琐。本章讲述 存储和处理这些数值的一个更简单和有效的方法,就是数 组,同时讲述有关集合的相关知识。
5.3 多维数组 5.3.1 二维数组
有两个下标的数组称为二维数组。二维 数组的声明和创建、元素引用、初始化 等与一维数组均类似,唯一不同之处在 于,二维数组需要通过两个下标来引用 其元素,因此其处理常需要使用双重的 For循环。
二维数组声明
语法格式
◦ Dim 数组名(下标1上界,下标2上界) As 类 型
分析:首先需要使用数组来保存该商店 每天的实际销售额。学习了前面内容后 ,读者可能马上会想到,是否可以用一 维数组呢?因为一年有365天。这里请 注意,题目中还需要求销售额最大的月 份,这意味着存储的数据需要按月存放 。这样,仅一维数组就不够用了。我们 可以声明一个二维数组:第一维表示月 份,第二维表示每个月份的每天实际销 售额。
(5)最后在文本框中显示计算结果。
1 2 3 4 ' 在文本框中显示计算数据 txbMaxMonth.Text = maxMonth txbTotalAmount.Text = lngTotal txbDayAverage.Text = lngTotal / 365
运行结果
5.3.2
多维数组
数组元素的引用
通过数组名和下标来引用数组元素,语 法格式如下。
◦ 数组名(下标)
其使用方式与单个变量很相似,可以出 现在任何可以使用单个变量的地方。
例子
例如,下面代码引用了intA数组中的第1 个元素,并将其赋值给另外一个变量a。 Dim a As Integer a=intA(1)
下面代码声明了两个二维数组。
◦ Dim populations(200, 3) As Long ◦ Dim matrix(5, 15, 10) As Single
应用示例:盘点某商店一年的销 售情况
问题:某商店经营了一年后,在年终盘 点的时候,需要计算该商店今年总的销 售额、每天的平均销售额以及销售额最 大的月份。
动态数组
VB.NET允许使用Redim语句为之前创建 的数组重新分配存储空间。
◦ Redim[Preserve]数组名(下标上界列表) ◦ Preserve是可选的修饰符,当仅更改最后 一个维度的大小时,用来保留现有数组中 的数据。 ◦ 下标上界列表中列出了重新定义的数组各 个维度的下标上界。 ◦ Redim语句仅适用于数组。
之后就可以使用该对象的方法来生成伪 随机数了
◦ objRnd.Next():用于生成非负的伪随机数 。 ◦ objRnd.NextDouble():用于生成0.0到1.0 之间的随机数。
(3)累加求年度总销售额和每个月的 月份销售额。
(4)求销售额最大的月份。 这实际上是求数组lngMonthSales中最大 元素对应的月份。
示例:模拟学生数据库 StudentDatabase
该示例中需要使用一个结构数组来模拟 实现一个处理学生信息的数据库应用程 序,可以动态录入学生的相关信息,包 括学号、姓名和成绩,并且可以根据学 生成绩排序。
Step1:新建一个Windows Form应用程 序工程,并命名为 “StudentDatabase”。 Step2:进行窗体界面设计
F1=1 F2=2 Fn=Fn-2+Fn-1
这是一个有序的一维数列,我们可以声 明一个数组来存放它,并将其第一个元 素和第二个元素赋值为1。
构建“Fibonacci”应用程序
Step1:新建一个Windows Form应用程 序工程,并命名为“Fibonacci”。 Step2:进行窗体界面设计。
数组声明与创建
语法格式如下。
◦ Dim 数组名(下标上界) As 元素类型
◦ 数组名后面的圆括号表明这是一个数组,而不是 单个变量。 ◦ 仅有一个下标,表示这是一个一维数组。下标必 须是常量或者常量表达式,而不能是变量。数组 下标从0开始,因此数组可以包含元素的总数,即 数组的长度应该为下标上界加1。 ◦ As后面的类型指明数组元素的类型,如果省略, 则默认为Object类型。
Step3:编写代码。
计算Fib数列中的项
运行结果
示例2:使用Eratosthenes筛选法 求素数
问题:使用Eratosthenes筛选法求1000 以内的素数。所谓Eratosthenes筛选法 ,是指首先留下2(第一个素数),而 后把2的倍数统统删除;再留下3(第二 个素数),而后把3的倍数统统从数组 中删去;再往下是5,7……像筛子一样 ,把不需要的数逐步筛去,留下的就是 所求的素数。
在VB.NET中,可以使用数组来表示这样 的一组数据,名称相同,仅使用下标( 也成为索引)来区分这些数据。每一个 数据称为数组的元素,这些元素的下标 都是连续的,数组中包含元素的个数称 为数组的长度。
一个由10个元素组成的Integer类 型数组
数组名,注意该数组中所 有元素都使用相同的名字 intA intA(0) intA(1) intA(2) intA(3) intA(4) intA(5) intA(6) 数组intA中元素的下标, 代表了该元素在该数组中的 位置 intA(7) intA(8) intA(9) 1 10 45 478 12 16 55 0 75 90
构建“SalesAverage”应用程序
Step1:新建一个Windows Form应用程 序工程,并命名为SalesAverage。 Step2:进行窗体界面设计。
Step3:进行编码。 (1)声明变量
(2)生成随机数来模拟销售额。 首先,需要创建一个Random类的实例。
1 ' 创建一个伪随机数对象 2 Dim objRnd As Random = New Random( )
示例1:Fibaonacci数列
题目:如果一对兔子每月能生一对小兔 (一雄一雌),而每对小兔在它出生后 的第三个月里,假定在不发生死亡的又 生了一对小兔,情况下,由一对出生的 小兔开始,50个月后会有多少对兔子?
若把上述数列继续写下去,得到的数列 便称为斐波那契(Fibonacci)数列。 该数列的规律为:
分析:首先需要声明一个数组来保存这 1000个数,下标应当从0到999。 其次,从数组中将不需要的数字筛选出 去。这个筛选的过程显然应当使用循环 结构来实现。 最后,如何实现筛选的过程呢?最简单 的做法,是直接在该数组中将需要筛选 出去的数改为0。
构建“PrimeOfEratosthenes”应 用程序
Step3:创建结构,并声明结构数组。 结构的定义通常都是放在模块中的。 VB.NET中的模块(Module)是用于封装 定义在其中的成员的一种引用类型,使 用Module关键字标识,其基本语法格式 如下。
◦ Module 模块名 ◦ 成员声明 ◦ End Module
(1)添加模块。单击菜单栏中的【项 目】→【添加模块】命令,打开【添加 新项-StudentDabase】窗口,如图5-16 所示。在名称文本框中输入 MyStruct.vb,这是模块文件的名称, 同时MyStruct也会作为模块的名称。如 果有需要,也可以在代码中直接修改。
(2)在模块中定义结构、声明结构数 组,同时声明一个用于保存数组长度的 变量。
Step4:编写代码,添加按钮的单击事 件过程
运行结果
5.5
Array类
Array类位于System命名空间,提供创 建、操作、搜索和排序数组的方法,因 而在公共语言运行库中用作所有数组的 基类。我们之前用到的所有数组都继承 自该类。 在声明数组的时候,也可以写成如下形 式。
Step1:新建一个Windows Form应用程 序工程,并命名为 “PrimeOfEratosthenes”。 Step2:进行窗体界面设计。
Step3:编写代码。
运行结果
示例3:使用Boolean数组实现筛 选过程
对于筛选过程的实现,上面代码是通过 直接在数组中将其设为0来实现的。在 实际应用中,还可以使用一个Boolean 类型的数组来实现。
二维数组结构类似于表格,需要指明行 、列才能确定其中的元素,因此二维数 组有两个下标。
三维数组
三维数组的结构则类似于立方体,拥有 三个下标,依此类推,N维数组应该有N 个下标。
5.2
一维数组
仅有一个下标的数组称为一维数组,用 于存储和处理线性的数据。使用数组之 前,必须先声明这个数组,并为其分配 内存空间。
数组初始化
也可以在创建时不指明初始值,而在后 面使用赋值语句,代码如下。
◦ Dim strComments( ) = New String(20){ } ◦ strComments(1)="First" ◦ strComments(10)="Tenth"
数组应用
数组通常应用于对有序数据的处理。 从代码层面来说,在使用数组时,常与 循环语句,尤其是For语句结合使用。
Array类的常用属性与方法
Rank属性返回数组的维数。 Length属性返回数组的元素总数。
GetLength 方法返回指定维度的长度。 GetUpperBound方法返回指定维度的最大索引 值。每个维度的最小索引值始终为0。 Sort方法对数组的元素进行排序。 Reverse方法方法用于反转一维数组中的元素 顺序。 Copy方法用于在数组之间复制元素,并自动 处理强制类型转换。
5.6 使用集合代替数组 5.6.1 Visual Basic中的集合
VB.NET提供Collection类,位于 Microsoft.VisualBasic命名空间,可 以用于定义和创建自己的集合。下面是 一个创建集合的例子。
数组的维数
数组可以是一维或者多维的。 维是一个方向,可以在此方向上改变数 组元素的规范。
◦ 例如,保存月内每日总销量的数组有一个 维(当月日期)。 ◦ 而保存每个部门的月内每日总销量的数组 则有两个维(部门编号和当月日期)。
数组的维数也称为数组的秩。
一维数组
一维数组只有一个下标。
二维数组
例子
下面代码声明了一个整型的含有10个元 素的一维数组。 Dim intA(9)As Integer
在VB.Net中,将数组作为对象看待,因 此数组可以在声明时不指明其长度,而 是在使用之前使用New关键字创建,分 配相应的内存空间,其语法格式如下。
◦ Dim 数组名( ) As Integer ◦ 数组名=New 类型名(下标上界){ }
随着数组维数的增多,数组包含的元素 个数也急剧增多,所需的存储空间也急 剧增,因此在使用多维数组时需要谨慎 。一般常用数组为一维和二维数组,超 过三维以上的数组比较少用到。 三维数组,甚至N维数组的声明、创建 、使用、初始值设定项等均与一维、二 维数组类似,区别仅在于下标个数的不 同。
5.4
章节内容
5.1 5.2 5.3 5.4 5.5 5.6
什wk.baidu.com是数组 一维数组 多维数组 动态数组 Array类 使用集合代替数组
5.1
什么是数组
以存储全班60个学生的成绩为例。在数 学中,对于这样的一个数字序列,常会 用这样的方法表示:S1,S2,S3,…… ,S60。 显然,对于这样一批同类型的数据来说 ,完全可以只取一个名称S,然后使用 下标来区分它们。
区分数组对象和数组变量
数组变量保存指向数组对象的指针,而 数组变量一旦声明,就不能再更改它的 秩或元素数据类型。但是,在数组变量 的生存期内,可以将一系列不同的数组 对象分配给它,这些数组对象可以具有 不同的维长度。 数组对象保存的是数组元素、秩和长度 信息,数组对象一旦创建,就不能再更 改它的维数、维长度或元素的数据类型 ,只能更改其元素的内容
第5章 存储多个同类型的数 据——数组与集合
第3章中介绍了变量,使用变量可以存储数值。然而,当需 要存储同一类型的多个数值时,单个变量就无法胜任了。 例如,存储全班60个学生某一门课的成绩,也可以声明60 个Double类型的变量来存储。但是,采用这种方法,需要 记忆所有变量的名称,并且处理起来相当繁琐。本章讲述 存储和处理这些数值的一个更简单和有效的方法,就是数 组,同时讲述有关集合的相关知识。
5.3 多维数组 5.3.1 二维数组
有两个下标的数组称为二维数组。二维 数组的声明和创建、元素引用、初始化 等与一维数组均类似,唯一不同之处在 于,二维数组需要通过两个下标来引用 其元素,因此其处理常需要使用双重的 For循环。
二维数组声明
语法格式
◦ Dim 数组名(下标1上界,下标2上界) As 类 型
分析:首先需要使用数组来保存该商店 每天的实际销售额。学习了前面内容后 ,读者可能马上会想到,是否可以用一 维数组呢?因为一年有365天。这里请 注意,题目中还需要求销售额最大的月 份,这意味着存储的数据需要按月存放 。这样,仅一维数组就不够用了。我们 可以声明一个二维数组:第一维表示月 份,第二维表示每个月份的每天实际销 售额。
(5)最后在文本框中显示计算结果。
1 2 3 4 ' 在文本框中显示计算数据 txbMaxMonth.Text = maxMonth txbTotalAmount.Text = lngTotal txbDayAverage.Text = lngTotal / 365
运行结果
5.3.2
多维数组
数组元素的引用
通过数组名和下标来引用数组元素,语 法格式如下。
◦ 数组名(下标)
其使用方式与单个变量很相似,可以出 现在任何可以使用单个变量的地方。
例子
例如,下面代码引用了intA数组中的第1 个元素,并将其赋值给另外一个变量a。 Dim a As Integer a=intA(1)
下面代码声明了两个二维数组。
◦ Dim populations(200, 3) As Long ◦ Dim matrix(5, 15, 10) As Single
应用示例:盘点某商店一年的销 售情况
问题:某商店经营了一年后,在年终盘 点的时候,需要计算该商店今年总的销 售额、每天的平均销售额以及销售额最 大的月份。
动态数组
VB.NET允许使用Redim语句为之前创建 的数组重新分配存储空间。
◦ Redim[Preserve]数组名(下标上界列表) ◦ Preserve是可选的修饰符,当仅更改最后 一个维度的大小时,用来保留现有数组中 的数据。 ◦ 下标上界列表中列出了重新定义的数组各 个维度的下标上界。 ◦ Redim语句仅适用于数组。
之后就可以使用该对象的方法来生成伪 随机数了
◦ objRnd.Next():用于生成非负的伪随机数 。 ◦ objRnd.NextDouble():用于生成0.0到1.0 之间的随机数。
(3)累加求年度总销售额和每个月的 月份销售额。
(4)求销售额最大的月份。 这实际上是求数组lngMonthSales中最大 元素对应的月份。
示例:模拟学生数据库 StudentDatabase
该示例中需要使用一个结构数组来模拟 实现一个处理学生信息的数据库应用程 序,可以动态录入学生的相关信息,包 括学号、姓名和成绩,并且可以根据学 生成绩排序。
Step1:新建一个Windows Form应用程 序工程,并命名为 “StudentDatabase”。 Step2:进行窗体界面设计
F1=1 F2=2 Fn=Fn-2+Fn-1
这是一个有序的一维数列,我们可以声 明一个数组来存放它,并将其第一个元 素和第二个元素赋值为1。
构建“Fibonacci”应用程序
Step1:新建一个Windows Form应用程 序工程,并命名为“Fibonacci”。 Step2:进行窗体界面设计。
数组声明与创建
语法格式如下。
◦ Dim 数组名(下标上界) As 元素类型
◦ 数组名后面的圆括号表明这是一个数组,而不是 单个变量。 ◦ 仅有一个下标,表示这是一个一维数组。下标必 须是常量或者常量表达式,而不能是变量。数组 下标从0开始,因此数组可以包含元素的总数,即 数组的长度应该为下标上界加1。 ◦ As后面的类型指明数组元素的类型,如果省略, 则默认为Object类型。
Step3:编写代码。
计算Fib数列中的项
运行结果
示例2:使用Eratosthenes筛选法 求素数
问题:使用Eratosthenes筛选法求1000 以内的素数。所谓Eratosthenes筛选法 ,是指首先留下2(第一个素数),而 后把2的倍数统统删除;再留下3(第二 个素数),而后把3的倍数统统从数组 中删去;再往下是5,7……像筛子一样 ,把不需要的数逐步筛去,留下的就是 所求的素数。
在VB.NET中,可以使用数组来表示这样 的一组数据,名称相同,仅使用下标( 也成为索引)来区分这些数据。每一个 数据称为数组的元素,这些元素的下标 都是连续的,数组中包含元素的个数称 为数组的长度。
一个由10个元素组成的Integer类 型数组
数组名,注意该数组中所 有元素都使用相同的名字 intA intA(0) intA(1) intA(2) intA(3) intA(4) intA(5) intA(6) 数组intA中元素的下标, 代表了该元素在该数组中的 位置 intA(7) intA(8) intA(9) 1 10 45 478 12 16 55 0 75 90
构建“SalesAverage”应用程序
Step1:新建一个Windows Form应用程 序工程,并命名为SalesAverage。 Step2:进行窗体界面设计。
Step3:进行编码。 (1)声明变量
(2)生成随机数来模拟销售额。 首先,需要创建一个Random类的实例。
1 ' 创建一个伪随机数对象 2 Dim objRnd As Random = New Random( )
示例1:Fibaonacci数列
题目:如果一对兔子每月能生一对小兔 (一雄一雌),而每对小兔在它出生后 的第三个月里,假定在不发生死亡的又 生了一对小兔,情况下,由一对出生的 小兔开始,50个月后会有多少对兔子?
若把上述数列继续写下去,得到的数列 便称为斐波那契(Fibonacci)数列。 该数列的规律为:
分析:首先需要声明一个数组来保存这 1000个数,下标应当从0到999。 其次,从数组中将不需要的数字筛选出 去。这个筛选的过程显然应当使用循环 结构来实现。 最后,如何实现筛选的过程呢?最简单 的做法,是直接在该数组中将需要筛选 出去的数改为0。
构建“PrimeOfEratosthenes”应 用程序
Step3:创建结构,并声明结构数组。 结构的定义通常都是放在模块中的。 VB.NET中的模块(Module)是用于封装 定义在其中的成员的一种引用类型,使 用Module关键字标识,其基本语法格式 如下。
◦ Module 模块名 ◦ 成员声明 ◦ End Module
(1)添加模块。单击菜单栏中的【项 目】→【添加模块】命令,打开【添加 新项-StudentDabase】窗口,如图5-16 所示。在名称文本框中输入 MyStruct.vb,这是模块文件的名称, 同时MyStruct也会作为模块的名称。如 果有需要,也可以在代码中直接修改。
(2)在模块中定义结构、声明结构数 组,同时声明一个用于保存数组长度的 变量。
Step4:编写代码,添加按钮的单击事 件过程
运行结果
5.5
Array类
Array类位于System命名空间,提供创 建、操作、搜索和排序数组的方法,因 而在公共语言运行库中用作所有数组的 基类。我们之前用到的所有数组都继承 自该类。 在声明数组的时候,也可以写成如下形 式。
Step1:新建一个Windows Form应用程 序工程,并命名为 “PrimeOfEratosthenes”。 Step2:进行窗体界面设计。
Step3:编写代码。
运行结果
示例3:使用Boolean数组实现筛 选过程
对于筛选过程的实现,上面代码是通过 直接在数组中将其设为0来实现的。在 实际应用中,还可以使用一个Boolean 类型的数组来实现。
二维数组结构类似于表格,需要指明行 、列才能确定其中的元素,因此二维数 组有两个下标。
三维数组
三维数组的结构则类似于立方体,拥有 三个下标,依此类推,N维数组应该有N 个下标。
5.2
一维数组
仅有一个下标的数组称为一维数组,用 于存储和处理线性的数据。使用数组之 前,必须先声明这个数组,并为其分配 内存空间。
数组初始化
也可以在创建时不指明初始值,而在后 面使用赋值语句,代码如下。
◦ Dim strComments( ) = New String(20){ } ◦ strComments(1)="First" ◦ strComments(10)="Tenth"
数组应用
数组通常应用于对有序数据的处理。 从代码层面来说,在使用数组时,常与 循环语句,尤其是For语句结合使用。