C# Hashtable
2024-09-21 22:05:03
哈希表(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", "");
ht.Add("B", "");
ht.Add("C", "");
ht.Add("D", "");
遍历
// 遍历哈希表只能用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", "");
可以看到,Clone 以后,两个 Hashtable 是互不影响的。
CopyTo 将HashTable中键或值列表复制到数组中
String[] myTargetArray = new String[];
myTargetArray[] = "The";
myTargetArray[] = "quick";
myTargetArray[] = "brown";
myTargetArray[] = "fox";
myTargetArray[] = "jumped";
myTargetArray[] = "over";
myTargetArray[] = "the";
myTargetArray[] = "lazy";
myTargetArray[] = "dog";
ht.Keys.CopyTo(myTargetArray, ); //赋值键到数组中,从第7位起覆盖。
ht.Values.CopyTo(myTargetArray, );//赋值值到数组中,从第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", "");
ht.Add("B", "");
ht.Add("C", "");
ht.Add("D", ""); // 遍历哈希表只能用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", ""); // 将HashTable中键或值列表复制到数组的方法
String[] myTargetArray = new String[];
myTargetArray[] = "The";
myTargetArray[] = "quick";
myTargetArray[] = "brown";
myTargetArray[] = "fox";
myTargetArray[] = "jumped";
myTargetArray[] = "over";
myTargetArray[] = "the";
myTargetArray[] = "lazy";
myTargetArray[] = "dog";
ht.Keys.CopyTo(myTargetArray, ); //赋值键到数组中,从第7位起覆盖。
ht.Values.CopyTo(myTargetArray, );//赋值值到数组中,从第7位起覆盖。 // 移除所有元素
ht.Clear();
Console.ReadKey();
}
}
}
Hashtable完整代码
最新文章
- 空中网招聘Java架构师、数据库开发等各类人才
- JS WEB 交互问题
- 慕课网-Java入门第一季-6-10 练习题
- Nginx配置location总结及rewrite规则写法
- ssh和putty
- Spring Boot修改内置Tomcat端口号 (zhuan)
- 移动Web单页应用开发实践——页面结构化
- 【官方文档】《暗黑世界V1.4》API说明!
- 11.13 noip模拟试题
- WPF中TextBox的PreviewMouseLeftButtonUp事件
- NPOI 生成 excel基本设置
- android_orm框架之greenDAO(二)
- javascript字符串对象
- 深度解剖dubbo源码
- All you should know about NUMA in VMware!
- C++用法总结
- 我做SAP CRM One Order redesign的一些心得体会
- Linux下nmon工具安装及nmon analyser的使用
- centos6安装postgresql-(2)
- idea中 在接口中如何直接跳转到该接口的是实现类中?