選取集合類別
更新:2007 年 11 月
請務必小心選擇您的 System.Collections 類別。用錯型別將會限制集合的用途。
請考慮下列問題:
您是否需要循序清單,而其中的元素基本上會在擷取其值之後被捨棄?
您是否需要以特定順序 (例如 FIFO、LIFO 或隨機) 存取元素?
LinkedList<T> 泛型類別允許從頭到尾或從尾到頭方向的循序存取。
其餘集合提供隨機存取。
您是否需要透過索引來存取各個元素?
ArrayList 和 StringCollection 類別以及 List<T> 泛型類別透過元素以零起始的索引,提供對其元素的存取方式。
Hashtable、SortedList、ListDictionary 和 StringDictionary 類別以及 Dictionary<TKey, TValue> 和 SortedDictionary<TKey, TValue> 泛型類別提供藉由元素索引鍵存取其元素的方式。
NameObjectCollectionBase 和 NameValueCollection 類別以及 KeyedCollection<TKey, TItem> 和 SortedList<TKey, TValue> 泛型類別透過元素以零起始的索引或索引鍵,提供對其元素的存取方式。
各個元素是否將包含一個值、一個索引鍵和一個值的組合,或一個索引鍵和多個值的組合?
一個索引鍵和一個值:依據 IDictionary 介面或 IDictionary<TKey, TValue> 泛型介面來使用任何集合。
一個具有內嵌索引鍵的值:使用 KeyedCollection<TKey, TItem> 泛型類別。
一個索引鍵和數個值:使用 NameValueCollection 類別 (Class)。
您是否需要以不同於元素輸入的方式來將其排序?
Hashtable 類別會以其元素的雜湊程式碼來排序元素。
SortedList 類別以及 SortedDictionary<TKey, TValue> 和 SortedList<TKey, TValue> 泛型類別會依據 IComparer 介面和 IComparer<T> 泛型介面的實作,以索引鍵排序其元素。
ArrayList 提供採用 IComparer 實作做為參數的 Sort 方法。它的泛型對應項目 (也就是 List<T> 泛型類別) 會提供 Sort 方法,此方法採用 IComparer<T> 泛型介面的實作做為參數。
您是否需要快速的資訊搜尋和擷取?
- 處理小型集合 (十個項目或更少) 時,ListDictionary 比 Hashtable 來得快。Dictionary<TKey, TValue> 泛型類別的查閱速度則比 SortedDictionary<TKey, TValue> 泛型類別還要快。
您是否需要只接受字串的集合?
StringCollection (以 IList 為基礎) 和 StringDictionary (以 IDictionary 為基礎) 均位於 System.Collections.Specialized 命名空間 (Namespace) 內。
此外,您也可以使用 System.Collections.Generic 命名空間中的任何泛型集合類別做為強型別字串集合,只需指定其泛型型別引數的 String 類別即可達成此目的。
LINQ to Objects
只要物件型別實作 IEnumerable 或 IEnumerable<T>,LINQ to Objects 就可讓開發人員使用 LINQ 查詢存取記憶體中的物件。LINQ 查詢提供一般模式以存取資料,比標準的 foreach 迴圈 (Loop) 更精簡、可讀性更高,並提供篩選、排序和群組功能。此外,LINQ 查詢也能提高效能。如需詳細資訊,請參閱 LINQ to Objects。
請參閱
參考
System.Collections.Specialized