《C#数组、结构和枚举.ppt》由会员分享,可在线阅读,更多相关《C#数组、结构和枚举.ppt(17页珍藏版)》请在金锄头文库上搜索。
1、第章 C#数组、结构和枚举声明一个变量可以存储一个值,当遇到要存储多个相同类型的值的时候,变量就显得无能为力,数组正是在这种存储需求下设计的一种数据结构;常量可用来存储一个固定值,但是要存储多个固定值的时候,常量也失效了,这时候就要借助于枚举来实现;而结构是用来表示更加复杂的值类型,在结构里,用户可以声明不同数据类型的变量作为一个整体。学完本章后,读者将了解数组、结构和枚举的用法。本章主要涉及到的知识点有:数组:理解数组的概念,并创建数组。使用数组:包括定位、遍历、查找、排序等典型操作。结构:在需要考虑运行效率、且几乎不做运算的数据应该作为结构定义。了解结构的用法。枚举:用于声明一组命名的常数
2、。理解枚举的好处,并使用枚举。5.1 C#中的数组在日常生活中,人们用容器来存储物品,为了方便查找,总是将众多的物品分门别类地存储在不同的容器中。在计算机程序中,同样会遇到处理大量具有相同类型的数据的时候,C#语言提供了“数组”这一数据结构,用于处理这样的数据。5.1.1 声明和初始化一维数组【本节示例参考:源代码chapter55.1.1ArrayExample】数组类似于生活中的容器,可以将一组数据类型相同的数据按照一定的顺序存储起来,存储在数组中的数据又叫元素,可以通过“索引”,或叫“下标”的整数来区分数组中的元素。C#支持一维数组、多维数组(矩形数组)和数组的数组(交错数组)。下面通过
3、一个例子来学习一维数组。暑期到了,音像店的老板Landy整理了一个CD架位置,并买了5张碟片放在上面出租,分别是功夫熊猫、不可思议绿巨人、赤壁、木乃伊3、牛仔裤的夏天2,有客人来租碟的时候,就从相应的位置找到这张碟。如果把这个CD架理解为一个“数组”,它顺序存放的“元素”就是碟片。在程序中,可以用以下的语句声明一个数组:string movies;声明以后,需要让计算机内存分配指定大小的空间,这叫初始化数组,如下所示:movies = new string5;5.1.2 声明和初始化其他类型的数组通过一维数组的方式,解决了Landy保存部分碟片的问题。但是Landy的烦恼是,随着碟片不断增多,
4、查找碟片越来越难,如果能给每张碟片一个编号,编号表示碟片存放的位置在第几排第几列,这样会方便很多,每一张碟片的编号及其存储位置如图5.1所示。5.1.3 支持数组语言实现的基类:System.Array【本节示例参考:源代码chapter55.1.3ArrayClass】C#中的数组是由System.Array类派生而来的引用对象,它提供一些公共的属性和方法,对数组的操作提供了很大帮助。其常用的属性和方法如表5.1所示(更多的属性和方法请参考MSDN)。常用方法的使用会在以下章节中介绍。5.1.4 访问数组元素【本节示例参考:源代码chapter55.1.4VisitExample】 Land
5、y的新碟到了以后,生意好了很多,每天都有很多人去租碟。通过每张碟的编号,从CD架上找到碟片。这就好比从数组中去访问每个元素一样。访问元素的方式很多,最直接的就是通过数组的下标。假如所有碟片都放在一排陈列架上,就要用一维数组,例如:定义一维数组:string movies = new string “功夫熊猫”,”不可思议绿巨人”,”赤壁”,”木乃伊3”,”牛仔裤的夏天2”获取第一个元素:movies0 =“功夫熊猫”。获取最后一个元素:movies4 = “牛仔裤的夏天2”。假如碟片分别放在多排CD架上每排可以放多张碟,则要用二级数组,定义二维数组:string , movies = new
6、string , “功夫熊猫”,”不可思议绿巨人”,”赤壁”,”木乃伊3”这样创建的数组,表示CD在架上是这样摆放的,如图5.2所示。获取第一个元素:movies0,0 = “功夫熊猫”。获取最后一个元素:movies1,1 = “木乃伊3”。5.1.5 使用foreach语句遍历数组【本节示例参考:源代码chapter55.1.5ForeachExample】遍历是指全部访问数组中的元素一次且仅一次,可以在遍历的过程中完成查找等许多操作,需要注意一点:foreach循环对数组内容进行只读访问,所以不能改变任何元素的值。foreach语句格式如下:foreach (data_typt item
7、_name in arr_name) /遍历每一个元素注意:无论是几维的数组,foreach语句都会从最深层的原子元素开始,遍历一次且仅一次,因此,不需要嵌套foreach循环。5.1.6 查找数组元素【本节示例参考:源代码chapter55.1.6SearchExample】数组的元素是有序的,每一个元素对应一个唯一下标,在程序设计中,经常需要查找某个元素是否存在,以及该元素所在的位置等操作。可以通过遍历整个数组的方式来查找,也可以通过System.Array提供的BinarySearch方法完成这些操作。有个客户需要租赤壁,Landy需要在CD架中找到片名叫赤壁的碟片,下面的例子演示了查找
8、元素赤壁所在的位置的两种方法:5.1.7 对数组进行排序【本节示例参考:源代码chapter55.1.7SortExample】生活中会经常遇到一些排序问题,比如把一个班的考试成绩排序,足球比赛积分排序等。那么怎样用计算机程序来完成排序工作呢?这个问题前人早就有深刻的研究,总结出了很多高效率的排序算法,下面就来看看怎样用C#语言实现经典的冒泡排序。在编写程序之前,先来了解一下冒泡排序算法原理。假设现有5个数:3,5,2,4,1,要将它们从小到大排序。冒泡排序的过程如图5.3所示。5.2 用C#中的结构来实现音像记录表C#是面向对象的语言,结构可视为轻量级的类,是创建用于存储少量数据的数据类型的
9、理想选择,不能表示以后可能要通过继承进行扩展的类型。本章将通过讲解实现完善碟片编号的功能来向读者展示结构的用法。5.2.1 音像信息记录表程序实例【本节示例参考:源代码chapter55.2.1StructTest】通过数组一节,Landy完成了碟片的存储和给碟片编号的任务。现在Landy希望把所有的碟片记录在电子表格中,以方便查找。对电子表格的设计通常采用图5.4的形式。5.2.2 理解值类型的结构实践了上一节的例子以后,再来了解结构的概念,相信大家已经茅塞顿开了。定义结构的语法非常简单,以关键字struct打头,格式如下:struct 结构名 属性,方法等结构是用户定义的值类型。与类相似,
10、结构可以包含构造函数、常数、字段、方法、属性、索引器、运算符和嵌套类型(如上一节的例子,分别定义了no、name、isRent三个字段和一个Status方法)。在结构的声明中,属性是无法初始化的,除非声明为const或static,例如:public struct CDList public const float PI = 3.14f; public static string category=动画片; .3 用C#枚举给音像分类问题总是伴随着项目的不断壮大而产生,这是软件不断升级的一个原因,为了在升级过程中不造成更大的困扰,程序员需要在开始软件设计的时候,充分地预感未来可能会发生的事情,
11、并想办法及早地规避问题的发生。音像店碟片的不断增加,在成百上千的记录表中要找到一条信息,也是相当费时的,Landy需要对记录表进行优化。他需要对碟片按照下面方式分类:文艺片,战争片,喜剧片,爱情片,科幻片按照这种方式给碟片分类,会更方便管理,对于大数据量的碟片管理会带来帮助。 5.3.1 用枚举来给音像归类实例【本节示例参考:源代码chapter55.3.1EnumTest】继续重构音像记录表,把每一条记录加上一个类别属性,当有用户要租喜剧片的时候,就只需要把类别是喜剧片的分出来,在里面找到用户所需要的碟片,如图5.7所示。 5.3.2 通过实例理解枚举的作用【本节示例参考:源代码C8Exam
12、ple_TraverseArray】程序中的任何一个概念,都是为了解决某类问题而来,枚举亦是如此。枚举可以理解为一组常数的集合,它很好地限定了这组常数的范围,供程序在任何需要的地方引用。枚举的定义以关键字enum来标示,语法如下:enum 枚举名 枚举成员或者:访问修辞符 enum 枚举名:基础类型 枚举成员 5.4 小结学完本章后,读者将了解以下内容。(1)数组、结构和枚举都是C#中常用的数据类型结构。(2)数组能够存储具有相同数据类型的一组值,数组可以分为一维数组、多维数组和交错数组。(3)可以使用foreach语句遍历数组,使用System.Array类提供的方法操作数组。(4)结构用关
13、键字struct声明,结构跟类相似,可以包含构造函数、常数、字段、方法、属性、索引器、运算符和嵌套类型。(5)要求访问快、且几乎不做运算的那些数据应该作为结构,而需要做很多运算的那些数据应该作为类来处理。(6)枚举用关键字enum声明,枚举是用于存储一组常数的集合,他很好的限定了这组常数的范围,供程序在任何需要的地方引用。本章习题一、选择题1在面的说法,有误的是 ( )string movies = new string 周一,周二,周三,周四,周五A数组下标从0开始B其中movies3= 周四Cmovies.Length =5Dmovies.Rank = 22在C#中,下列哪些语句可以创建一个具有3 个初始值为的元素的字符串数组?( ) Astring StrList3(); Bstring3 StrList = ,; Cstring StrList = ,; Dstring StrList = new string3;3下列语句创建了多少个string 对象?( )string, strArray = new string34;A0 B3 C4 D12二、简答题1给数组arr=45,6,22,87,4,96排序,要求至少用两种方法。2在编写图书管理系统中,图书有书名、作者、编号等属性,有是否在库、被谁借出等状态。请编写一个图书的结构体,并初始化一本图书。