初涉Hashtable寄語
由於近段時間培訓內容涉及到Hashtable方面的知識,由於培訓僅僅起到一個引導的作用,加之以前又接觸得少,因此對Hashtable這個東東蠻陌生,呵呵,今晚木有事兒就一起來學習一下吧,更歡迎大神進來批評指正
什么是Hashtable
我們從字面意思就可以猜到Hashtable就是哈希表,它是通過類實現一個哈希表,里面存着一個個的鍵值對,哈希表可以將鍵映射到相應的值。Hashtable是一個容器,我們可以使用key來快速查找相應的值。並且在Hashtable中key和value均為object類型,也就是說Hashtable可以支持任何類型。
對Hashtable方法的簡單操作
對於Hashtable進行一些簡單的操作,羅列一下下,特別提醒使用Hashtable時必須引用System.Collections命名空間
1 static void Main(string[] args) 2 { 3 Hashtable ht = new Hashtable(); 4 ht.Add("Name1","斷橋殘雪1"); 5 ht.Add("Name2", "斷橋殘雪2"); 6 ht.Add("Name3", "斷橋殘雪3"); 7 string j=ht["Name3"].ToString(); 8 ht.Remove("Name2"); 9 Console.WriteLine(j); 10 j = ht["Name2"].ToString(); //運行出錯 11 Console.WriteLine(j); 12 Console.ReadKey(); 13 }
Hashtable中我們可以添加一個鍵值對、移除一個鍵值對、移除所有鍵值對、判斷哈希表中是否包含某個鍵值對。以上方法都蠻簡單,就是有一點需要注意:使用Hashtabel對象的事例查找值時不要想當然的去弄出個Hashtable[0]這個東東,表面上編譯木有問題,可是運行時問題就來了,會提示“未將對象引用設置到對象的實例”,大家要注意咯,所謂鍵值對嘛,最終需要用鍵去獲取值,不能用索引,這兒也木有索引這么個說法!這句話不對,感謝園友提醒,其實如果key值為數值是可以使用Hashtable[0]來獲取其value的,不過不推薦這么寫,索引一多容易混淆。
對Hashtable屬性的簡單操作
關於Hashtable屬性也不多,看下圖:
親自試驗,加深印象:
1 static void Main(string[] args) 2 { 3 Hashtable ht = new Hashtable(); 4 ht.Add("Name1", "斷橋殘雪1"); 5 ht.Add("Name2", "斷橋殘雪2"); 6 ht.Add("Name3", "斷橋殘雪3"); 7 ht.Add("Name4", "斷橋殘雪4"); 8 ht.Add("Name5", "斷橋殘雪5"); 9 10 int count = ht.Count; 11 Console.WriteLine("Hashtable一共有" + count + "組鍵值對"); 12 bool isFixedSize = ht.IsFixedSize; 13 Console.WriteLine("Hashtable是否具有固定大小:" + isFixedSize); 14 bool isReadOnly = ht.IsReadOnly; 15 Console.WriteLine("Hashtable是否只讀:" + isReadOnly); 16 ICollection keys = ht.Keys; 17 ICollection values = ht.Values; 18 foreach (var item in keys) 19 { 20 Console.WriteLine(item); 21 } 22 foreach (var item in values) 23 { 24 Console.WriteLine(item); 25 } 26 Console.ReadKey(); 27 }
結果如下:
對Hashtable的遍歷<非常實用>
既然我們前面就說了Hashtable是一個容器,那么我們就應該可以對其進行遍歷,獲取其所有的鍵和值,於是在木有看相關知識前我想當然的寫下了如下代碼:
1 foreach (var myitem in ht) 2 { 3 Console.WriteLine(myitem.Key + "-" + myitem.Value); 4 }
很顯然試過后錯誤很明顯,壓根編譯都不能通過。那么我們我們如何才能夠遍歷Hashtable中的鍵值對呢,通過上網查資料知道了些
1 foreach (DictionaryEntry myitem in ht) 2 { 3 Console.WriteLine(myitem.Key + "-" + myitem.Value); 4 }
我們可以使用DictionaryEntry結構,通過它可以設置或檢索的字典鍵/值對,不過在這里使用foreach讀取哈希表中的鍵值有點需要知道,foreach 語句是對枚舉數的包裝,它只允許從集合中讀取,不允許寫入集合。所以我們再次設置鍵值對的值會編譯時報錯
結語
雙休就這么過去了,新的工作日又來了,也有更多的挑戰等着我,繼續吧,菜鳥成長ing
------如果你覺得此文對你有所幫助,別忘了點擊下右下角的推薦咯,謝謝!------