IList 介面定義透過索引存取集合物件的方法, IList 實作 ICollection 與 IEnumerable介面成員,同時定義數個操作元素的方法成員,提供集合物件類似陣列元素的存取功能。
實作 IList 介面最重要的類別為 ArrayList 類別,它提供動態存取陣列物件的能力,接下來列舉說明其重要的方法成員。
Add
將一個object型別的物件 objEle加入到指定的集合物件,並且回傳一個整數資料型別數值,其代表這個物件被加入集合中的位置索引,使用這方法可以將任何型別的資料加入到指定的集合物件。
將一個物件objEle插入到指定的集合裏,其中第一個參數值intindex,即為物件所要插入的位置,當這個物件被插入的時候,於intindex 這個索引值以後的物件均會依序往後移動。
從一個指定的集合物件裏,移走其中第一個元素 objEle,當元素被移走之後,其後的元素則依序往前遞補。
將集合物件裏,指定索引位置intindex上的元素移除。
這個方法回傳一個布林型別的資料值,表示集合中是否含有參數objEle物件,有的話為true,否則為false。
引用這個方法,將會刪除集合物件中的所有元素。
回傳物件於objEle集合中的位置索引,若是集合中找不到這個物件,則回傳一個-1的值。
建構式包含了三個覆寫版本,最簡單的版本沒有接受任何參數,以此版本建立的 ArrayList物件,容量會自動被設定為 16 ,另外一個建構式則接受一個指定初始容量值的參數,定義如下:
ArrayList 類別實作了 IList 、 ICollection 、 IEnumerable 以及 Icloneable 等數個介面,因此同時實作了這些介面所定義的方法成員,以下的範例說明如何建立一個 ArrayList 類別物件,利用其定義的方法以及屬性成員,進行 ArrayList 集合物件的元素存取操作。
ArrayList 類別提供另一個方法 Insert ,支援特定位置的新成員插入。
以下建立一個類別作為ArrayList集合物件示範說明。
在主程式中,首先建立一個方法 WriteList ,這個方法接受 ArrayList 參數 list ,內容如下:
接下來在主程式中引用此方法逐一輸出指定的 ArrayList 物件元素。
後續的程式碼,分別引用各種方法進行物件元素的操作,然後將操作結束的 arrayList 傳入 WriteList 以檢視結果。 Insert 方法分別於索引值等於 8 以及 16 的位置插入物件,並且指定其物件 ID 為 17 以及 20 。 引用Remove 方法移走索引位置上的第 3 個物件,並引用 RemoveAt 移走索引位置等於 10 的物件。
最後引用方法 Reverse 將陣列中的物件元素作反轉排列, 引用 Clone 將整個集合物件複製成為另一個 ArrayList 類別物件陣列。
ArrayList 類別提供的另一個重要方法 Sort ,此方法被應用於排列 ArrayList 集合中物件的大小,其形式如下:
實作 IList 介面最重要的類別為 ArrayList 類別,它提供動態存取陣列物件的能力,接下來列舉說明其重要的方法成員。
Add
將一個object型別的物件 objEle加入到指定的集合物件,並且回傳一個整數資料型別數值,其代表這個物件被加入集合中的位置索引,使用這方法可以將任何型別的資料加入到指定的集合物件。
int Add (object objEle )Insert
將一個物件objEle插入到指定的集合裏,其中第一個參數值intindex,即為物件所要插入的位置,當這個物件被插入的時候,於intindex 這個索引值以後的物件均會依序往後移動。
void Insert (int intindex , object objEle)Remove
從一個指定的集合物件裏,移走其中第一個元素 objEle,當元素被移走之後,其後的元素則依序往前遞補。
void Remove(object objEle)RemoveAt
將集合物件裏,指定索引位置intindex上的元素移除。
void RemoveAt(int intindex)Contains
這個方法回傳一個布林型別的資料值,表示集合中是否含有參數objEle物件,有的話為true,否則為false。
bool Contains (object objEle)Clear
引用這個方法,將會刪除集合物件中的所有元素。
Void Clear()IndexOf
回傳物件於objEle集合中的位置索引,若是集合中找不到這個物件,則回傳一個-1的值。
int IndexOf (object objEle)從 IList 介面的方法說明中,你可以發現它最大的特色在於提供類似陣列索引的存取機制,無論如何,實作IList介面最重要的類別為 ArrayList ,這是一種動態版本的陣列集合,下一節我們針對這個類別作說明。
ArrayList
建構式包含了三個覆寫版本,最簡單的版本沒有接受任何參數,以此版本建立的 ArrayList物件,容量會自動被設定為 16 ,另外一個建構式則接受一個指定初始容量值的參數,定義如下:
public ArrayList(int intCapacity)其中的 intCapacity 為所要初始化的容量大小。
ArrayList 類別實作了 IList 、 ICollection 、 IEnumerable 以及 Icloneable 等數個介面,因此同時實作了這些介面所定義的方法成員,以下的範例說明如何建立一個 ArrayList 類別物件,利用其定義的方法以及屬性成員,進行 ArrayList 集合物件的元素存取操作。
ArrayList 類別提供另一個方法 Insert ,支援特定位置的新成員插入。
以下建立一個類別作為ArrayList集合物件示範說明。
// ArrayListDemo public class KTObject { int _id; public KTObject(int id) { _id = id; } public int GetID { get { return _id; } } }KTObject 類別建構式接受一個 int 型別的參數 id,將其值指定給變數 _ id ,另外定義唯讀屬性 GetID ,回傳 _id 變數值,作為此物件的識別編號。
在主程式中,首先建立一個方法 WriteList ,這個方法接受 ArrayList 參數 list ,內容如下:
void WriteList(ArrayList list) { int size = list.Count; Console.WriteLine("以下為陣列物件內含元素 : "); for (int i = 0; i < size; i++) { KTObject o = (KTObject)list[i]; Console.Write(o.GetID + ","); } Console.WriteLine("容量 = {0},物件數目={1}\n", list.Capacity, size); }一開始引用類別 ArrayList 的屬性 Count ,取得參數 list 內含的物件數目,並將其指定給變數 pSize ,接下來的 for 迴圈敘述,依序取得 list 參數內含物件,並將其鑄型為 KTObject 型別,引用 GetID取得物件識別編號逐一輸出,顯示參數 list 儲存的物件元素。
接下來在主程式中引用此方法逐一輸出指定的 ArrayList 物件元素。
class Program { static void Main(string[] args) { Program program = new Program(); ArrayList arrayList = new ArrayList(); Console.WriteLine("arrayList 初始容量 = {0} \n",arrayList.Count); Console.WriteLine ("引用方法 Add 依次插入物件並且指定其物件 ID 分別為 0~14 "); for (int i = 0; i < 15; i++) { arrayList.Add(new KTObject(i)); } program.WriteList(arrayList); Console.WriteLine ("引用方法 INSERT 分別於位置索引 8 以及 16 插入物件指定其物件ID 分別為 17 以及 20 "); arrayList.Insert(8, new KTObject(17)); arrayList.Insert(16, new KTObject(20)); program.WriteList(arrayList); Console.WriteLine ("引用方法 Remove 分別移走於位置索引 10 以及第二個加入的物件 "); arrayList.Remove(arrayList[2]); arrayList.RemoveAt(10); program.WriteList(arrayList); Console.WriteLine("引用方法 Reverse 逆轉物件排列順序 "); arrayList.Reverse(); program.WriteList(arrayList); Console.WriteLine("複製一個新的 ArrayList 物件 arrayList1 "); ArrayList arrayList1 = (ArrayList)arrayList.Clone(); program.WriteList(arrayList1); Console.ReadLine(); } }一開始建立 ArrayList 集合物件 arrayList ,引用 Count 屬性取得內容的初始容量值並且輸出,從這個結果可以看到初始容量的值。 接下來的 for 迴圈逐次加入 15個新建立的 KTObject 物件,於建立物件的建構式傳入每次的迴圈次數,當作 ObjectElement 物件的識別 ID。
後續的程式碼,分別引用各種方法進行物件元素的操作,然後將操作結束的 arrayList 傳入 WriteList 以檢視結果。 Insert 方法分別於索引值等於 8 以及 16 的位置插入物件,並且指定其物件 ID 為 17 以及 20 。 引用Remove 方法移走索引位置上的第 3 個物件,並引用 RemoveAt 移走索引位置等於 10 的物件。
最後引用方法 Reverse 將陣列中的物件元素作反轉排列, 引用 Clone 將整個集合物件複製成為另一個 ArrayList 類別物件陣列。
arrayList 初始容量 = 0 引用方法 Add 依次插入物件並且指定其物件 ID 分別為 0~14 以下為陣列物件內含元素 : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,容量 = 16,物件數目=15 引用方法 INSERT 分別於位置索引 8 以及 16 插入物件指定其物件ID 分別為 17 以及 20 以下為陣列物件內含元素 : 0,1,2,3,4,5,6,7,17,8,9,10,11,12,13,14,20,容量 = 32,物件數目=17 引用方法 Remove 分別移走於位置索引 10 以及第二個加入的物件 以下為陣列物件內含元素 : 0,1,3,4,5,6,7,17,8,9,11,12,13,14,20,容量 = 32,物件數目=15 引用方法 Reverse 逆轉物件排列順序 以下為陣列物件內含元素 : 20,14,13,12,11,9,8,17,7,6,5,4,3,1,0,容量 = 32,物件數目=15 複製一個新的 ArrayList 物件 arrayList1 以下為陣列物件內含元素 : 20,14,13,12,11,9,8,17,7,6,5,4,3,1,0,容量 = 15,物件數目=15以上為輸出結果,請自行比對程式碼即可。
方法 Sort 與物件排序
ArrayList 類別提供的另一個重要方法 Sort ,此方法被應用於排列 ArrayList 集合中物件的大小,其形式如下:
public virtual void Sort();Sort 透過集合中每個元素的 IComparable 介面實作功能,支援 ArrayList 中元素的排序作業, IComparable 定義了集合中比較兩個物件大小的方法。
class Program { static void Main(string[] args) { ArrayList arrayList = new ArrayList(); arrayList.Add(10); arrayList.Add(20); arrayList.Add(15); arrayList.Add(5); arrayList.Add(30); Console.WriteLine("\n排序前的陣列內容 !!"); Program program = new Program(); program.WriteList(arrayList); Console.WriteLine("\n排序後的陣列內容 !!"); arrayList.Sort(); program.WriteList(arrayList); Console.ReadKey(); } void WriteList(ArrayList list) { Console.WriteLine(); int pSize = list.Count; for (int i = 0; i < pSize; i++) { Console.Write(list[i] + "\t"); } Console.WriteLine(); } }首先建立一個 ArrayList 類別物件 arrayList ,並依序加入 5 個整數值,分別是 10 、 20 、 15 、 5 以及 30 ,引用 WriteList 將其中的內容輸出。 接下來引用 ArrayList 類別所提供的排序方法 Sort ,此方法依大小重新排序集合中的物件,再度引用WriteList 將排序後的內容輸出。
排序前的陣列內容 !! 10 20 15 5 30 排序後的陣列內容 !! 5 10 15 20 30以上執行結果顯示了集合經過排列後,與原先的排列結果比較。
沒有留言:
張貼留言