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

综述:

   C#中的集合一般指C#中的集合类,一般用于处理对象列表,功能大多是通过实现System.Collections命名空间中的接口而获得的。数组是System.Array类的实例,只是集合类的一种。

  

System.Collection命名空间中的下述几个接口提供了基本的集合功能:

     1.IEnumerable可迭代集合中的项

     2.ICollection(继承于IEnumerable)可以获取集合中项的个数,并能把项复制到一个简单的数组类型中

     3.IList(继承于IEnumerableICollection)提供了集合的项列表,允许访问这些项,并提供其他一些与这些项列表相关的基本功能

     4.IDictionary(继承于IEnumerableIcollection)类似于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:

             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).索引器不是一个变量,不指向数据存放的位置,而数组指向数据存放地址。索引器中读写数据时用getset访问器

 3.索引器被称为有参属性,但它与属性之间的区别是:

    1).属性以属性名标示,索引器用函数方式标示(访问权限级别+返回值+this+参数)

    2).索引器可以被重载

    3).索引器永远属于实例成员,不能声明为static,而属性可以。

 

.关键字值集合和Idictionary

    集合类中可以通过实现接口IDictionary实现关键字值作为索引参数而非索引值。区别于IList接口。为简化IDictionary接口的实现,可以通过继承DictionaryBase类。类似于Ilist继承CollectioinBase类。

     IList接口和IDictionary接口区别如下
    1.IDictionary可以实现clear()count方法,不能实现RemoveAt()方法。但可实现Remove()方法

         2. Add()方法有两个object类型的参数,一个存放关键字一个存放值

         3.Remove()方法的参数是关键字值,即带有该值的项将会被删除

         4.Indexer使用一个字符串键值,而非一个索引用户Dictonary的继承成员来访问存储的项,这里任需进行数据类型转换

         5.foreach的工作方式:IDictonary接口中提供DictonaryEntry结构实现项目的访问,用该结构的Value成员访问集合中的对象

.迭代器

   迭代器是一个能够实现依次返回每个元素的功能的代码块,类似于foreach功能重写定制。凡是函数签名符合迭代器规则的方法、属性访问器和其他代码块都可以作为迭代器。签名规则如下:

    1.返回值有限制:返回值必须是IEnumeratorIenumerableIeumerator<T>Ienumerable<T>

        1).如果要迭代一个类,可以使用GetEnumerator()方法,其返回类型是Ienumerator.

  2).如果要迭代一个类成员,则返回值是Ienumerable

 2.使用yield  return返回需要的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值