第9章 数组和集合
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.3 集合
C#语言提供了许多方法来实现集合.我们在上一 节中讨论了标准的C#数组语法,在本小节中,我 们将要学习System.Collections命名空间所包含 的接口.这些接口为所有的C#集合类型定义了框 架.
9.3.1 ICollection接口基本知识
ICollection接口定义了对所有集合类通用的属性 和方法.其被接口IList和Idictionary继承,由 类ArrayList,CollectionBase,DictionaryBase, Hashtable,Queue ,SortedList和Stack实现. ICollection接口的常用属性如表所示.
9.4 动态数组类
ArrayList代表一个能根据需要动态增加大小的一 维数组,同时其能包含任何托管类型的元素,而 且不要求所有元素都是相同的类型.当需要建立 一个对象数组模型却不知道对象数量时,它们会 非常有用.
9.4.1 ArrayList的简单使用
【本节示例参考:\示例代码\Chap09\TestArrayList】 ArrayList对象是较为复杂的数组.ArrayList类提供了多 数System.Collections类都提供的功能,但这些功能在数 组类中没提供.可以将ArrayList看作是扩充了功能的数组. 但其不同于数组,其区别如下: 数组的容量是固定的,而ArrayList的容量可根据需要自动 扩充. ArrayList提供了添加,插入等功能,而数组却没有. ArrayList只提供一维的形式,而数组可以是多维的.
9.4.5 ArrayList元素的查找
【本节示例参考:\示例代码\Chap09\FindArrayList】 同数组一样,ArrayList中也提供了查找其元素的方法,即 ArrayList.IndexOf()方法,ArrayList.LastIndexOf()方 法和ArrayLst.Contains()方法. 由于前两种方法同Array中同名方法的用法基本相同,所以 就不一一介绍了,Contains()的定义如下: public virtual bool contains( Object item //将要查找的对象 )
9.2 数组使用
在程序设计方面,数组的用途非常大.为了方便 用户的使用,C# 2008提供了许多属性和方法等来 支持数组的操作.要想学好数组,对这些方法和 属性的掌握是十分必要的.
9.2.1 数组简单应用
System.Array类是C#语言中各种数组的基类,其 属性和方法如图所示.
9.2.2 数组元素的清空
9.4.2 ArrayList元素的添加
【本节示例参考:\示例代码\Chap09\AddArray】 C#中为ArrayList提供了元素添加的方法,其为 ArrayList.Add().ArrayList.Add方法的定义 如下: public virtual int Add( Object value //添加的对象 )
9.1.1 应用一维数组
【本节示例参考:\示例代码\Chap09\TestArray1】 数组必须先定义,后使用.数组的定义采用以下方式: <type>[]<name> 其中Type可以是任意的类型,name是数组的名称.数组可以通过两种方式 进行初始化,第一种方式是完整的指定数组的内容;第二种方式是指定数 组的长度,并使用new关键字初始化所有的数组元素. int[] intArray={1,2,3} //声 明了一个一维数组并赋值 等价于: int[ ] intArray //声 明了一个一维数 intArray={1,2,3}; //对 数组赋值 上述代码是第一种方法. int[3] intArray; //声 明了一个一维数 intArray=new int[3]; //对数 组初始化
9.4.4 ArrayList元素的删除
C#中为ArrayList提供了元素删除的方法 ArrayList.Clear().ArrayList.Clear方法的定 义如下: public virtual void Clear( ) 该方法是从调用ArrayList对象中删除了所有元素. 即Count属性被设为0,但其容量Capacity属性却 不变.代码演示了向Array中删除元素的功能. 【本示例参考:\示例代码 \Chap09\DeletionArrayList】
9.4.6 ArrayList元素的遍历列表
【本节示例参考:\示例代码 \Chap09\TraversalArrayList】 可以使用同数组相同的方法对ArrayList进行遍历, 即foreach 语句.代码演示了ArrayList元素的遍 历列表.
9.4.7 ArrayList容量的缩减
9.1.3 应用交错数组
【本节示例参考:\示例代码\Chap09\TestArray3】 数组的元素不仅可以是同一种类型的数值,同时还可以是数组.元素为数 组的数组,就叫交错数组,每个元素纬度和大小可以不同.要创建一个行 数固定,列数可变的数组,语法为: Type[ ][[ ] arrayName=new type[numberRows][ ]; // 声明一个交错数组 arrnyName[0]=new type[numberCols0]; //对 arrnyName[0]初始化 arrnyName[1]=new type[numberCols1]; //对 arrnyName[1]初始化 arrnyName[2]=new type[numberCols2]; //对 arrnyName[2]初始化 arrnyName[numberRows-1]=new type[numberCols]; //对 arrnyName[3]初始化 或者: arraryName=new type[3]{new int[numberCols0], new int[numberCols0], new int[numberCols0] };
Байду номын сангаас
9.2.3 数组元素的查找
【本节示例参考:\示例代码 \Chap09\IndexofArray】 C#为数组提供了Array.IndexOf和 Array.LastIndexOf方法,用于查找数组中的元素. Array.IndexOf方法的定义如下: Array.IndexOf(Array,,Object) Array.IndexOf(Array, Object ,Int32) Array.IndexOf(Array, Object ,Int32,Int32)
9.2.4 数组元素的排序
【本节示例参考:\示例代码\Chap09】 虽然遍历的方法可以对数组进行排序,但是却非常麻烦.因此C#提供了用 于排序的方法Array.Sort和Array.Reverse,Array.Sort方法用于对一维 数组对象中的元素进行排序,Array.Reverse方法用于反转一维数组对象 中元素的顺序.Array.Sort方法的定义如下. public static void Sort( Array array //要排序 的一维数组 ) public staic void Sort( Array array, //要排序 的一维数组 Int index, //排序范 围的起始索引 Int length //排序范 围内的元素数 )
9.4.3 ArrayList元素的插入
【本节示例参考:\示例代码 \Chap09\InsertArrayList】 C#中为ArrayList提供了元素插入的方法 ArrayList.Insert().ArrayList.Insert方法 的定义如下: public virtual void Insert ( Int index, //插入对象的位置 Object value //插入的对象 )
第9章 数组和集合
C# 2008语言提供了好多数据结构,使用它们能给 我们编程带来了很大的方便.它们包括数组, ArrayList,Queue,Stack,Hashtable和 SortedList等.数据结构是由基本类型数据按一 定规则组成的,学习数据结构,就是要学会规则.
9.1 数组
数组是一种数据结构,其中包含一些可透过计算得到之索 引来存取的变量.数组中所包含的变量,又称为数组的元 素,都具有相同型别,而此型别就叫做数组的元素型别. 数组具有阵序规范(Rank Specifier),此阵序规范可决 定与每一个数组元素关联的索引数目.数组的阵序规范也 称为数组的维度(Dimension).阵序规范为1的数组称为 一维数组.阵序规范大于1的数组则称为多维数组.特定大 小的多维数组通常称为二维数组,三维数组等. 数组的每个维度都具有关联长度,这个长度是一个大于或 等于0的整数.维度长度不是数组型别的一部分,而是在执 行阶段产生数组型别(ArrayType)执行个体时所建立.维 度长度决定该维度的有效索引范围:长度为N的维度,索引 范围是从0至N–1.数组的元素总数等于数组中每一个维度 长度的乘积.如果数组其中一个或多个维度的长度为零, 则这个数组称之为空数组.
【本节示例参考:\示例代码\Chap09\ClearArray】 由于数组的大小是不可以变的,因为其是在初始 化时就已经确定,因此数组元素的清空只将部分 元素设置为0,False,或空,这和数组元素的类 型有关.为此,C#中提供了Array.Clear()方法. Array.Clear Array.Clear方法的定义如下: public static void Clear(Array array, int index, int length) 参数Array为要进行删除操作的数组,index为要清 除的一系列的起始索引,length为要清除的元素数. 代码演示了Array.Clear()的用法,实现数组的清空.
9.3.2 IEnumerable接口和IEnumerator接口的基本知识 IEnumerable接口声明了一个方法支持对集合进行简单的遍 历.大部分表示一个元素序列或元素集合的类都将实现这 个接口.IEnumerator接口定义了一些属性和方法允许一个 枚举器对集合进行简单的遍历.任何作为枚举器使用的类 都将实现这个接口.接口IEnumerable的定义格式如下: public interface IEnumerable 其有一个公有实例方法: IEnumerator GetEnumerator() GetEnumerator()返回一个用于遍历一个集合元素的枚举器. 接口IEnumerator的定义格式如下: public interface IEnumerator
9.1.2 应用二维数组和多维数组
【本节示例参考:\示例代码\Chap09\TestArray2】 数组可以有多个维度,当为二个维度时,就叫二维数组.不管它有几个维 度,与一维数组没多大差别.每行长度相同的数组称为矩形数组.每行长 度不同的数组叫锯齿型数组.声明一个二维的矩形数组的语法为: type[,] arraryName=new type[numberRows,numberCols]; 方括号中逗号的数量表示数组的维数,如果为二,就叫二维数组.常用声 明二维数组第一种形式为: int[,] intArray={{1,2},{3,4}}; 在声明数组时初始化了它的元素.第二种形式为: int[,] intArray //声明一个二维数组 intArray=new int[2,2]; //对二维数组初始化 指定了数组长度,并使用new关键字初始化所有的数组元素.同理可以声 明三维等多维数组,如: int [,,] intArray=new int[2,2,2]; //声明一个三维数组