哈希表(Hashtable)
在.NET Framework中,Hashtable 是 System.Collections 命名空間提供的一個容器,用於處理和表現類似 key-value 的鍵值對,其中 key 通常可用來快速查找,同時 key 是區分大小寫;value 用於存儲對應於 key 的值。
Hashtable 中 key-value 鍵值對均為 object 類型,所以 Hashtable 可以支持任何類型的 key-value 鍵值對。
創建Hashtable實例
Hashtable ht = new Hashtable();
Add 添加key-value鍵值對
ht.Add("A", "1"); ht.Add("B", "2"); ht.Add("C", "3"); ht.Add("D", "4");
遍歷
// 遍歷哈希表只能用foreach來遍歷,因為Hashtable不能用索引訪問 // 遍歷key foreach (Object item in ht.Keys) { Console.WriteLine((string)item); } // 遍歷value foreach (Object item in ht.Values) { Console.WriteLine((string)item); } //遍歷 foreach (DictionaryEntry de in ht) { Console.WriteLine("Key : {0} ; Value : {1}.", de.Key, de.Value); } // 遍歷哈希表(結果與上面相同) IDictionaryEnumerator myEnumerator = ht.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("Key : {0} ; Value : {1}.", myEnumerator.Key, ht[myEnumerator.Key]); }
哈希表排序
ArrayList list = new ArrayList(ht.Keys); list.Sort(); foreach (string key in list) { Console.WriteLine("Key : {0} ; Value : {1}.", key, ht[key]); }
賦值
ht["A"] = "你好";
Contains 判斷哈希表是否包含特定鍵
//返回值為 true 或 false if (ht.Contains("A")) { Console.WriteLine("Key : {0} ; Value : {1}.", "A", ht["A"]); }
Remove 移除一個key-value鍵值對
ht.Remove("C");
Clear 移除所有元素
ht.Clear();
Clone 復制
Hashtable ht2 = ht.Clone() as Hashtable; ht2["A"] = "世界"; ht["B"] = "晚安"; ht.Add("E", "5");
可以看到,Clone 以后,兩個 Hashtable 是互不影響的。
CopyTo 將HashTable中鍵或值列表復制到數組中
String[] myTargetArray = new String[15]; myTargetArray[0] = "The"; myTargetArray[1] = "quick"; myTargetArray[2] = "brown"; myTargetArray[3] = "fox"; myTargetArray[4] = "jumped"; myTargetArray[5] = "over"; myTargetArray[6] = "the"; myTargetArray[7] = "lazy"; myTargetArray[8] = "dog"; ht.Keys.CopyTo(myTargetArray, 6); //賦值鍵到數組中,從第7位起覆蓋。 ht.Values.CopyTo(myTargetArray, 10);//賦值值到數組中,從第7位起覆蓋。
未執行 ht.Keys.CopyTo(myTargetArray, 6) 前
執行 ht.Keys.CopyTo(myTargetArray, 6) 后
執行 ht.Values.CopyTo(myTargetArray, 10) 后
完整代碼

using System; using System.Collections;//使用Hashtable時,必須引入這個命名空間 namespace ConsoleTest { class HashtableTest { public static void HashtableTestMain() { // 創建一個Hashtable實例 Hashtable ht = new Hashtable(); // 添加key-value鍵值對 ht.Add("A", "1"); ht.Add("B", "2"); ht.Add("C", "3"); ht.Add("D", "4"); // 遍歷哈希表只能用foreach來遍歷,因為Hashtable不能用索引訪問 // 遍歷key foreach (Object item in ht.Keys) { Console.WriteLine("Key : {0} ;", (string)item); } // 遍歷value foreach (Object item in ht.Values) { Console.WriteLine("Value : {0} ;", (string)item); } //遍歷 foreach (DictionaryEntry de in ht) { Console.WriteLine("Key : {0} ; Value : {1}.", de.Key, de.Value); } // 哈希表排序 ArrayList list = new ArrayList(ht.Keys); list.Sort(); foreach (string key in list) { Console.WriteLine("Key : {0} ; Value : {1}.", key, ht[key]); } // 賦值 ht["A"] = "你好"; // 判斷哈希表是否包含特定鍵,其返回值為true或false if (ht.Contains("A")) { Console.WriteLine("Key : {0} ; Value : {1}.", "A", ht["A"]); } // 移除一個key-value鍵值對 ht.Remove("C"); // 遍歷哈希表 IDictionaryEnumerator myEnumerator = ht.GetEnumerator(); while (myEnumerator.MoveNext()) { Console.WriteLine("Key : {0} ; Value : {1}.", myEnumerator.Key, ht[myEnumerator.Key]); } // 復制 Hashtable ht2 = ht.Clone() as Hashtable; ht2["A"] = "世界"; ht["B"] = "晚安"; ht.Add("E", "5"); // 將HashTable中鍵或值列表復制到數組的方法 String[] myTargetArray = new String[15]; myTargetArray[0] = "The"; myTargetArray[1] = "quick"; myTargetArray[2] = "brown"; myTargetArray[3] = "fox"; myTargetArray[4] = "jumped"; myTargetArray[5] = "over"; myTargetArray[6] = "the"; myTargetArray[7] = "lazy"; myTargetArray[8] = "dog"; ht.Keys.CopyTo(myTargetArray, 6); //賦值鍵到數組中,從第7位起覆蓋。 ht.Values.CopyTo(myTargetArray, 10);//賦值值到數組中,從第7位起覆蓋。 // 移除所有元素 ht.Clear(); Console.ReadKey(); } } }