哈希表(Hashtable) Hashtable用於處理和表現相似key/value的鍵值對,其中key一般可用來快速查找,同時key是區分大小寫;value用於存儲對應於key的值。Hashtable中key/value鍵值對均爲object類型,因此Hashtable能夠支持任何類型的key/value鍵值對. 添加一個key/value鍵值對:HashtableObject.Add(key,value); 去除某個key/value鍵值對:HashtableObject.Remove(key); 移除全部元素: HashtableObject.Clear(); 是否包含特定鍵key: HashtableObject.Contains(key); Hashtable ht=new Hashtable(); //建立一個Hashtable實例 ht.Add("E","e");//添加key/value鍵值對 ht.Add("A","a"); string s=(string)ht["A"]; if(ht.Contains("E")) //判斷哈希表是否包含特定鍵,其返回值爲true或false Console.WriteLine("the E key:exist"); ht.Remove("C");//移除一個key/value鍵值對 Console.WriteLine(ht["A"]);//此處輸出a ht.Clear();//移除全部元素 Console.WriteLine(ht["A"]); //此處將不會有任何輸出 遍歷哈希表須要用到DictionaryEntry Object,代碼以下: for(DictionaryEntry de in ht) //ht爲一個Hashtable實例 { Console.WriteLine(de.Key);//de.Key對應於key/value鍵值對key Console.WriteLine(de.Value);//de.Key對應於key/value鍵值對value } 對哈希表進行排序在這裏的定義是對key/value鍵值對中的key按必定規則從新排列,可是實際上這個定義是不能實現的,由於沒法直接在Hashtable進行對key進行從新排列,若是須要Hashtable提供某種規則的輸出,能夠採用一種變通的作法: ArrayList akeys=new ArrayList(ht.Keys); //別忘了導入System.Collections akeys.Sort(); //按字母順序進行排序 foreach(string skey in akeys) { Console.Write(skey + ":"); Console.WriteLine(ht[skey]);//排序後輸出 } SortedList類:表示鍵/值對的集合,與哈希表相似,區別在於SortedList中的Key數組排好序的。 SortedList sl = new SortedList(); sl["c"] = 41; sl["a"] = 42; foreach (DictionaryEntry element in sl) { string s = (string)element.Key; int i = (int)element.Value; Console.WriteLine("{0},{1}", s, i); } Dictionary 泛型集合 泛型最多見的用途是泛型集合,命名空間System.Collections.Generic 中包含了一些基於泛型的集合類,使用泛型集合類能夠提供更高的類型安全性,還有更高的性能,避免了非泛型集合的重複的裝箱和拆箱。 不少非泛型集合類都有對應的泛型集合類:rrayList,List<T>;HashTable,DIctionary<T>;Queue,Queue<T>; Stack,Stack<T>;SortedList,SortedList<T> Dictionary<string, string> myDic = new Dictionary<string, string>(); myDic.Add("aaa", "111"); myDic.Add("bbb", "222"); myDic.Add("ccc", "333"); myDic.Add("ddd", "444"); //若是添加已經存在的鍵,add方法會拋出異常 try { myDic.Add("ddd","ddd"); } catch (ArgumentException ex) { Console.WriteLine("此鍵已經存在:" + ex.Message); } //解決add()異常的方法是用ContainsKey()方法來判斷鍵是否存在 if (!myDic.ContainsKey("ddd")) { myDic.Add("ddd", "ddd"); } else { Console.WriteLine("此鍵已經存在:"); } //而使用索引器來負值時,若是建已經存在,就會修改已有的鍵的鍵值,而不會拋出異常 myDic ["ddd"]="ddd"; myDic["eee"] = "555"; //使用索引器來取值時,若是鍵不存在就會引起異常 try { Console.WriteLine("不存在的鍵\"fff\"的鍵值爲:" + myDic["fff"]); } catch (KeyNotFoundException ex) { Console.WriteLine("沒有找到鍵引起異常:" + ex.Message); } //解決上面的異常的方法是使用ContarnsKey() 來判斷時候存在鍵,若是常常要取健值得化最好用 TryGetValue方法來獲取集合中的對應鍵值 string value = ""; if (myDic.TryGetValue("fff", out value)) { Console.WriteLine("不存在的鍵\"fff\"的鍵值爲:" + value ); } else { Console.WriteLine("沒有找到對應鍵的鍵值"); } //下面用foreach 來遍歷鍵值對 //泛型結構體 用來存儲健值對 foreach (KeyValuePair<string, string> kvp in myDic) { Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value); } //獲取值得集合 foreach (string s in myDic.Values) { Console.WriteLine("value={0}", s); } //獲取值得另外一種方式 Dictionary<string, string>.ValueCollection values = myDic.Values; foreach (string s in values) { Console.WriteLine("value={0}", s); }