C#程序设计简明教程 教学课件 ppt 作者 陈佛敏 潘春华 吕洋波 第4章 数组和集合

上传人:E**** 文档编号:89343633 上传时间:2019-05-23 格式:PPT 页数:27 大小:212KB
返回 下载 相关 举报
C#程序设计简明教程 教学课件 ppt 作者  陈佛敏 潘春华 吕洋波 第4章  数组和集合_第1页
第1页 / 共27页
C#程序设计简明教程 教学课件 ppt 作者  陈佛敏 潘春华 吕洋波 第4章  数组和集合_第2页
第2页 / 共27页
C#程序设计简明教程 教学课件 ppt 作者  陈佛敏 潘春华 吕洋波 第4章  数组和集合_第3页
第3页 / 共27页
C#程序设计简明教程 教学课件 ppt 作者  陈佛敏 潘春华 吕洋波 第4章  数组和集合_第4页
第4页 / 共27页
C#程序设计简明教程 教学课件 ppt 作者  陈佛敏 潘春华 吕洋波 第4章  数组和集合_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C#程序设计简明教程 教学课件 ppt 作者 陈佛敏 潘春华 吕洋波 第4章 数组和集合》由会员分享,可在线阅读,更多相关《C#程序设计简明教程 教学课件 ppt 作者 陈佛敏 潘春华 吕洋波 第4章 数组和集合(27页珍藏版)》请在金锄头文库上搜索。

1、第4章 数组和集合,数组是C#程序设计中最常使用的类型之一。数组能够按一定规律把相关的数据组织在一起,能通过“索引”或“下标”快速地管理这些数据。集合是指一组类似的对象。在C#中,任意类型的对象都可以放入一个集合中,并将其视为Object类型。C#开发大量使用集合的原因在于:一方面,世界中的很多问题需要使用集合来描述;另一方面,C#提供了强大的集合操作能力。本章将介绍有关数组和集合的概念和应用。,4.1 数 组,数组(Array)是一组相关数据的集合,在C#中应用较为广泛。本节将介绍数组的概念及应用。,4.1.1 数组简介,数组即一组数据,把一系列数据组织在一起,成为一个可操作的整体。 可以称

2、这个清单为“需购物品”,它规律地列出了其内部的数据,且其内部数据具有相同的性质。在C#中,可以称这样一个清单为数组: string myStrArr=“油“ , “盐“ , “酱“, “醋“, “毛毛熊“; 在数组中的每一个元素对应排列次序下标。当使用其中的某个元素时,可以直接利用这个次序下标,例如: 1. for(int i=0;imyStrArr.Length;i+) 2. 3. Console.WriteLine(“item0:1“,i,myStrArri); 4. 将输出数组myStrArr中所有的元素。,4.1.2 创建数组,在C#中,数组大体可以分为三种:一维数组、多维数组和交错数

3、组。 1一维数组:如果数组中的每个数据都只有一个元素,那么,这样的数据就称之为一维数组。一维数组的定义方式如下: data_type arr_name = new data_typeint length 2多维数组:如果数组中的每个数据都由多个元素组成,那么,这样的数据就称之为多维数组。多维数组的定义方式如下: data_type, arr_name = new data_typeint length1,int length2,int lengthn 3交错数组:C#支持各个维度长度不同的多维数组,称为交错数组,也称为“数组的数组”。交错数组的定义如下: data_type arr_name

4、= new data_typeint length1int length2,4.1.3 访问数组,访问数组的元素包括读取或设置某个元素的值。最基本的方法是通过下标定位元素,另外还可以使用GetValue/SetValue方法。 1通过下标定位元素 C#中数组对其中的元素进行排序,并从0开始计数,这样每一个元素都会有一个唯一的下标,通过这个下标,就可以定位唯一的一个元素。 2使用GetValue/SetValue GetValue方法定义如下: public object GetValue(params int indices);,4.1.4 数组排序,对数组进行排序是指按照一定的排序规则,如递

5、增或递减规则,重新排列数组中的所有元素。可以使用Array类的Sort方法完成这个功能。Sort方法有多种重载方式,常用的形式如下: public static void Sort(Array array); 其中,参数array为待排序的数组。下面的示例首先定义了一个数组,含有元素5,4,3,2,1,然后利用Sort方法对其排序:,4.1.5 数组应用的实例,本节将利用上一章和本章所介绍的字符串和数组操作技术,实现一个完整的示例:我的书房之图书排序。其功能为按照一定的排列顺序显示一系列图书信息,最终实现结果如图4-1所示。 1Book类 2BookList类 3主函数 4扩展,4.2 数 组

6、 序 列,数组序列(ArrayList)是一种较为复杂的数组,其实现了可变大小的一维数组。常用属性和方法如图所示。,4.2.1 创建ArrayList,利用ArrayList的构造函数来创建一个新的列表,常用的形式有以下两种: (1)public ArrayList() (2)public ArrayList(int capacity) 参数capacity可以指定所创建列表的初始容量。如果不指定,则初始容量为.NET的默认值16。下面的代码创建了两个列表对象: 1. ArrayList arr1=new ArrayList(); 2. ArrayList arr2=new ArrayList

7、(100);,4.2.2 添加元素,可以通过ArrayList的Add和AddRange方法,实现向一个列表中添加数据。两者的区别在于:Add一次只能添加一个元素,而AddRange一次可以添加多个元素,这多个元素需要放在一个集合或数组中。两者常用的形式如下: (1)public int Add(object value) (2)public void AddRange(ICollection c) Add和AddRange方法只能将元素添加到列表的末尾,如果想要在列表的任意位置添加元素,则需要使用Insert方法。,4.2.3 删除元素,ArrayList中支持删除元素的方法有3个,形式分别

8、如下: (1)public void Remove(object obj):用于删除数组中特定对象obj的第一个匹配项。参数obj为要从ArrayList移除的Object; (2)public void RemoveAt(int index):用于移除ArrayList的指定索引处的元素。参数index为要移除的元素的从零开始的索引; (3)public void RemoveRange(int index,int count):用于从ArrayList中移除一定范围的元素。参数index为要移除元素的起始索引(从零开始计数),参数count为要移除的元素数。,4.2.4 查找元素,在集合中

9、对特定元素的查找也是常用的操作之一,ArrayList提供了二分查找的方法BinarySearch,可以在复杂度O(logn)内完成查找, 如果使用制定的排序策略对集合中的元素进行排序之后,相应地,也可以使用同样的排序策略,结合BinarySearch方法实现元素的查找。这时,形式如下: public virtual int BinarySearch(object value,IComparer comparer); 此时,将使用指定的比较器在整个已排序的ArrayList中搜索元素,并返回该元素从零开始的索引。参数value为待查找的元素,而Icomparer为指定的比较策略。,4.2.5

10、遍历列表,1使用foreach语句 遍历列表是指访问一遍列表中的所有元素,可以使用foreach语句完成这个功能。 2使用GetEnumerator方法 除了foreach之外,还可以使用ArrayList的GetEnumerator方法实现列表的遍历。形式如下: public virtual IEnumerator GetEnumerator(); GetEnumerator方法返回整个ArrayList的枚举数对象IEnumerator。这个对象可以得到一个集合对象的所有元素,其最主要的属性为Current,用于获取集合中的当前元素。,4.3 哈 希 表,普通意义上的哈希表(Hashtab

11、le)常用于查询数据。在一般的列表中,数据和其存储位置(可理解为索引)之间不存在确定的关系。在其中查找数据时,需进行一系列的比较操作,如二分查找策略等。 在C#中,哈希表稍有不同,是一个对的集合,每一个元素都是这样一个对。这里,键(key)类似于普通意义上的下标,唯一确定一个值(value)。,4.3.1 Hashtable类,哈希表(Hashtable)是一个元素为对的集合,每个元素是一个存储在DictionaryEntry对象中的键/值对,键不能为空引用null,但值可以为null。 在需要存储具有键/值对属性的数据时,例如对、等具有一一对应关系的数据时,常常需要使用哈希表。,4.3.2

12、构造普通哈希表,本小节将利用常见的一个哈希函数来构造一个哈希表,这个哈希函数f如下所示。 key = value%13 即对于任意一个整数值,都将通过这个哈希函数得到一个键。例如: (1)f(1)=1; (2)f(15)=2; (3)f(39)=f(13)=0。 当发生多个值对应于一个键的冲突时,如上面的39和13,采用线性哈希的方式来消解冲突,即当某一个值添加到哈希表时,如果其键所在的位置已经被另一个数所占有,那么将向后线性寻找,直到找到下一个空的位置。,4.3.3 SortedList类,Hashtable类本身并不具有排序的功能,如果想要进行排序,则需要使用SortedList类。Sor

13、tedList类本质上也是一个哈希表,与Hashtable不同的是,它表示键/值对的集合,这些键和值按键排序,并可按照键和索引访问。SortedList类常用属性和方法如图,4.3.4 搜索排序哈希表,本小节继续沿用4.3.2节的哈希表,使用同样的哈希函数来构造一个SortedList,并提供查询的功能。下面的代码实现了一个构造上述排序哈希表的类MySortedList: 类MySortedList只有一个属性slResult,为所构造的哈希表。方法AddItem的功能为向slResult中插入一个新的元素。实现思路与4.3.2类MyHashtable中的实现类似。 另一个方法Search实现

14、了对哈希表的搜索功能,输入为一个value值,然后通过哈希函数在第35行直接寻找其对应的key值。,4.4 队 列,队列(Queue)实际上是一种特殊的列表。对列表的操作进行了限制,要求列表中的元素必须满足先进先出的原则,这类似于现实生活中的排队,如图所示。其最主要的方法为入队操作Enqueue和出队操作Dequeue,分别完成在队列尾的添加新元素操作和在队列头的删除元素操作。其他Queue支持的方法,例如遍历、清空等和ArrayList类似,不再赘述。Queue类常用属性和方法如图所示。,4.4.1 创建队列,利用Queue的构造函数创建一个新的队列,常用的形式包括以下几种: (1)publ

15、ic Queue () (2)public Queue (int capacity) (3)public Queue( int capacity, float growFactor) 参数capacity可以指定所创建列表的初始容量,如果不指定,则初始容量为.NET的默认值32。而参数growFactor则指定当队列满后容量的增长率,新容量等于当前容量与growFactor的乘积,默认值为2.0。,4.4.2 元素入队,可以通过Queue的Enqueue,实现向一个元素的入队操作,形式如下: public virtual void Enqueue(object obj); 下面的示例中,首先定

16、义了一个队列queue1,然后使用Enqueue方法,向其中添加了3个元素,其中第一个为字符串对象“Hello”,第二个为一个整数对象1,第3个为整型数组arr1。 1. Queue queue1=new Queue(); 2. 3. /字符串:“Hello“入队 4. object item=new object(); 5. item=“Hello“; 6. queue1.Enqueue(item); 7. /整数:1入队 8. item=1; 9. queue1.Enqueue(item); 10. /数组:arr1=1,2,3入队 11. int arr1=new int1,2,3; 12. queue1.Enqueue(arr1);,4.4.3 元素出队,与Enqueue相反,可以通过Queue的Dequeue,实现一个元素的出队操作,形式如下: public virtual object Dequeue(); 下面的示例中,首先定义了一个队列q

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号