C# Hashtable
哈希表(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(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2017-04-18 复选框的全选与反选