常用的集合型別
集合型別是資料集合的一般變形,例如雜湊表、佇列、堆疊、集合包、字典和清單。
集合是以 ICollection 介面、IList 介面、IDictionary 介面或這些介面的泛型版本為基礎。 IList 介面和 IDictionary 介面都衍生自 ICollection 介面,因此所有集合都是直接或間接以 ICollection 介面為基礎。 在以 IList 介面為基礎的集合 (例如 Array、ArrayList 或 List<T>) 或直接以 ICollection 介面為基礎的集合 (例如 Queue、ConcurrentQueue<T>、Stack、ConcurrentStack<T> 或 LinkedList<T>) 中,每個項目都只含一個值。 在以 IDictionary 介面為基礎的集合 (例如 Hashtable 和 SortedList 類別、Dictionary<TKey, TValue> 和 SortedList<TKey, TValue> 泛型類別),或以 ConcurrentDictionary<TKey, TValue> 類別為基礎的集合中,每個項目都包含一個索引鍵和一個值。 KeyedCollection<TKey, TItem> 類別是唯一的,因為它是一個數值清單,且數值中內嵌有索引鍵,因此它的行為既像清單也像字典。
泛型集合是強型別的最佳解決方案。 但若您的語言不支援泛型,System.Collections 命名空間 (Namespace) 便會包含基底集合,例如 CollectionBase、ReadOnlyCollectionBase 和 DictionaryBase,這些都是抽象基底類別,可以擴充來建立強型別 (Strongly Typed) 的集合類別。 在需要有效率的多執行緒集合存取時,請使用 System.Collections.Concurrent 命名空間中的泛型集合。
集合可以變動,取決於如何儲存元素、如何將它們排序、如何執行搜尋,以及如何進行比較。 Queue 類別和 Queue<T> 泛型類別提供先進先出清單,而 Stack 類別和 Stack<T> 泛型類別則提供後進先出清單。 SortedList 類別和 SortedList<TKey, TValue> 泛型類別提供 Hashtable 類別和 Dictionary<TKey, TValue> 泛型類別的排序版本。 Hashtable 或 Dictionary<TKey, TValue> 的元素只能藉元素的索引鍵來存取,但 SortedList 或 KeyedCollection<TKey, TItem> 的元素則可藉索引鍵或元素索引其中之一來存取。 所有集合中的索引都是以零起始,除了 Array 之外,它允許不是以零起始的陣列。
只要物件型別實作 IEnumerable 或 IEnumerable<T>,LINQ to Objects 功能就可讓您使用 LINQ 查詢以存取記憶體中的物件。 LINQ 查詢提供一般模式以存取資料,比標準的 foreach 迴圈 (Loop) 更精簡、可讀性更高,並提供篩選、排序和群組功能。 LINQ 查詢也可以提升效能。 如需詳細資訊,請參閱 LINQ to Objects 和平行 LINQ (PLINQ)。
相關主題
標題 |
說明 |
---|---|
說明允許將陣列當做集合一般處理的陣列功能。 |
|
說明泛型和非泛型清單的功能,這是最常使用的集合型別。 |
|
說明泛型和非泛型雜湊式字典型別的功能。 |
|
說明提供清單和集合之排序功能的類別。 |
|
說明泛型和非泛型佇列的功能。 |
|
說明泛型和非泛型堆疊的功能。 |
|
說明泛型 System.Collections.Generic.HashSet<T> 集合型別。 |
|
說明 System.Collections.Generic.HashSet<T> 集合型別提供的設定作業以及 LINQ 設定作業。 |
|
討論 .NET Framework 中可用的各種集合型別,包括堆疊、佇列、清單、陣列和結構。 |
|
描述泛型功能,其中包括 .NET Framework 所提供的泛型集合、委派和介面。 此外,還提供連結以連至 C#、Visual Basic 和 Visual C++ 的功能說明文件,以及連至像是反映 (Reflection) 等支援技術的說明文件。 |
參考資料
System.Collections.ICollection
System.Collections.Generic.ICollection<T>
System.Collections.Generic.IList<T>