C#中的集合類
阿新 • • 發佈:2020-12-02
集合相當於容器,用於將一系列相似的項組合在一起。
集合可以分為泛型集合類和非泛型集合類。
多數集合類都是派生自ICollection、IComparer、IEnumerable、IList、IDictionary和IDictionaryEnumerator介面以及它們的等效泛型介面,可繼承這些介面來建立新集合類。
ArrayList和List<T>
- 相當於可以動態增刪的動態陣列
- 內部有buffer,可以新增資料,buffer根據需要可以擴充
棧:Stack<T>
佇列:Queue<T>
雙向連結串列:LinkedList<T>
HashTable和Dictionary<TKey, Tvalue>
- 相當於鍵值對的集合
- 按照鍵進行查詢時,比在List中搜索的效率要高,可用於程式優化
- 用[]進行訪問,表示獲取,增加,刪除,修改
Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("Ton", "123"); dic["Jane"] = "333"; foreach(string key in dic.Keys) { Console.WriteLine(key + ":" + dic[key]); }
為什麼foreach既可以遍歷陣列,又可以遍歷集合?
for(型別 變數名 in xxx)
- xxxx必須實現一個GetEnumerator方法,該方法返回一個IEnumerator物件
- xxxx可以實現IEnumerable介面,來新增GetEnumerator方法
常用的集合類
集合元素的排序
1. 有序集合
- SortedList<T>, SortedSet<T>, SortedDictionary<T>
- 這些集合每插入就會排好序
2. 使用集合的Sort方法
- Array.Sort(arr, (a, b)=>a.Length-b.Length)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 基礎類學習 { public class Test { public static void Main() { string[] arr = { "Apple", "Pearl", "Banana", "AA" }; show(arr); //Array.Sort(arr); // 預設按字典序 Array.Sort(arr, (a, b) => a.Length - b.Length); show(arr); int i = Array.BinarySearch(arr, "Apple"); Console.WriteLine(i); Array.Reverse(arr); show(arr); } public static void show(object[] arr) { foreach (object obj in arr) Console.Write(obj + " "); Console.WriteLine(); } } }