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返回需要的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章