對資料的查詢,刪除等基本操作是任何程式設計語言都會涉及到的基礎,因此,研究了一下C#中比較常用的資料操作類型,並順手做個筆記.
List查詢時,若是處理比較大的資料則使用HashSet<T>類,因為List是基於線性表操作的.但其內嵌了二分尋找(BinarySearch),因此,也可以在儲存完之後進行排序,隨後用二分尋找.不過也可以這樣設計:Dictionary<TKey,List<T>>利用Dictionary高效的搜尋查詢能力來搜尋List<T>對象.但是資料卻是使用List<T>儲存.
HashSet<T>是一個不包含重複類型的集合類.此集合基於散列值,其操作都是很快的.相比較HashTable<TKey,TValue>,此集合類只包含一個型別參數,不是基於索引值對來儲存尋找元素的.若是需要確定元素是否存在,只需要調用Contains()方法即可.
List 尋找複雜度 O(n), HashSet 尋找複雜度O (1)
Dictionary類的刪除添加操作:
預設情況不排序下,添加了元素的位置是在刪除元素的位置.
若是排序,添加了元素的位置依舊會是在未排序之前的元素位置.
static void Main(string[] args) { Dictionary<int, int> _dic = new Dictionary<int, int>(); _dic.Add(3, 3); _dic.Add(1, 1); _dic.Add(2, 2); _dic.Add(6, 6); Console.WriteLine("未經排序:");foreach (var k in _dic) { Console.WriteLine(k.Key + " " + k.Value); }var dic_sort = from dic in _dic orderby dic.Key select dic; Console.WriteLine("未經處理:");foreach (var k in dic_sort) { Console.WriteLine(k.Key + " " + k.Value); } Console.WriteLine("經過刪除添加處理:"); _dic.Remove(2); _dic.Add(4, 4);foreach (var k in _dic) { Console.WriteLine(k.Key + " " + k.Value); } Console.Read(); }
你也可以自己測試下...