您的位置:首页 > 编程语言 > C#

8.集合,索引器和迭代器

2016-06-05 22:04 423 查看
综述:
   C#中的集合一般指C#中的集合类,一般用于处理对象列表,功能大多是通过实现System.Collections命名空间中的接口而获得的。数组是System.Array类的实例,只是集合类的一种。
  
System.Collection命名空间中的下述几个接口提供了基本的集合功能:
     1.IEnumerable可迭代集合中的项
     2.ICollection(继承于IEnumerable)可以获取集合中项的个数,并能把项复制到一个简单的数组类型中
     3.IList(继承于IEnumerable和ICollection)提供了集合的项列表,允许访问这些项,并提供其他一些与这些项列表相关的基本功能
     4.IDictionary(继承于IEnumerable和Icollection)类似于IList,但提供了可通过键值(而非索引)访问的项列表
 
 
一.简单集合-----数组

1.声明数组
    <baseType>[] <name>;

2.数组必须在访问前初始化,初始化的方式有如下两种:
    1).使用字面值指定数组,提供一个用逗号分开的元素值列表,如:
         int[] myArray={1,2,3,4};
 2).使用关键字new初始化,用一个常量定义数组大小,默认值为0
        int[] myArray=new int[arraySize const];
   
或者
        int[] myArray;
   myArray=new int[arraySize const];
3.foreach语句可以只读访问数组中的每一个元素,使用方法为:
         foreach(<baseType> <varName> in<arrayName>)
     {
       Console.WriteLine(varName);
      }
4.多维数组
        
相比于单维数组用一个索引访问元素,多为数组是用多个索引访问其元素
     1>.声明多维数组:
         <baseType>[ , , ,] <name>;
     2>.初始化多维数组:
          eg:<
4000
/p>
            
用new关键字: double[,] hillHeigh=new double[3,4];
            
用字面值:double [,,] Point={{1,2,3},{1,3,4},{1,3,5}};
5.数组的数组   

二.高级集合 -------
ArrayList
   System.Collection.ArrayList类的对象ArrayList可以处理大小可变的项列表。详细可见下表(区别语Array数组)
      

 
简单数组
ArrayList
类名
System.Array
System.Collection.ArrayList
特点
引用类型,需要初始化大小,并逐项赋值
大小可变,无需初始化大小
定义
Animal [] animalArray=new Animal[2]
ArrayList animalArrayList=new ArrayList();
赋值
animalArray[0]=new Chicken("ken");
animalArrayList.Add(new Chicken("Roy"));
统计大小
animalArray.Length()
animalArrayList.Count;
数据类型
数组的类型是Animal,可以直接使用
无数据类型,需强制转换成Animal
ArrayList的其他方法有:
    1). Remove(myCow2):删除myCow2对象
   2).RemoveAt(0):删除第一个对象
   3).AddRange(animalArray):把数组animalArray中的对象添加到集合中
   4).IndexOf(myCow2):myCow2的索引值
  
三.自定义强类型化集合
      自定义强类型集合最快捷的方式是定义一个继承自CollectionBase的类。但自定义集合不能用索引值来访问集合中的项
 
四.索引符
    索引符是一种特殊的属性,可以将之添加到类中,以便提供类似于数组的访问。
1.添加方法
   类的定义中用 this关键字+
[ ]。
2.索引器与数组的比较:用户
    1).索引器中的索引值不受限为整数,并且可以是多参数
    2).索引器允许重载,只要索引器的参数和返回值类型不同即可。
    3).索引器不是一个变量,不指向数据存放的位置,而数组指向数据存放地址。索引器中读写数据时用get和set访问器
 3.索引器被称为有参属性,但它与属性之间的区别是:
    1).属性以属性名标示,索引器用函数方式标示(访问权限级别+返回值+this+参数)
    2).索引器可以被重载
    3).索引器永远属于实例成员,不能声明为static,而属性可以。
 
五.关键字值集合和Idictionary
    集合类中可以通过实现接口IDictionary实现关键字值作为索引参数而非索引值。区别于IList接口。为简化IDictionary接口的实现,可以通过继承DictionaryBase类。类似于Ilist继承CollectioinBase类。
     IList接口和IDictionary接口
bd9f
区别如下
    1.IDictionary可以实现clear()和count方法,不能实现RemoveAt()方法。但可实现Remove()方法
         2. Add()方法有两个object类型的参数,一个存放关键字一个存放值
         3.Remove()方法的参数是关键字值,即带有该值的项将会被删除
         4.Indexer使用一个字符串键值,而非一个索引用户Dictonary的继承成员来访问存储的项,这里任需进行数据类型转换
         5.foreach的工作方式:IDictonary接口中提供DictonaryEntry结构实现项目的访问,用该结构的Value成员访问集合中的对象
六.迭代器
   迭代器是一个能够实现依次返回每个元素的功能的代码块,类似于foreach功能重写定制。凡是函数签名符合迭代器规则的方法、属性访问器和其他代码块都可以作为迭代器。签名规则如下:
    1.返回值有限制:返回值必须是IEnumerator、Ienumerable、Ieumerator<T>和Ienumerable<T>
        1).如果要迭代一个类,可以使用GetEnumerator()方法,其返回类型是Ienumerator.
  2).如果要迭代一个类成员,则返回值是Ienumerable
 2.使用yield  return返回需要的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#基础