15Hastable键值对集合和Dictionary字典集合
键值对集合
键值对集合:指Hashtable和Dictionary
Hashtable哈希表
Dictionary字典
多半用Dictionary字典,无论什么时候,都应该使用Dictionary<K,V>,理由如下:
1、Dic是类型安全的,这有助于我们写出更健壮更具可读性的代码,而且省却我们强制转化的麻烦。这个相信大家都明白。
2、Dic是泛行的,当K或V是值类型时,其速度远远超过Hashtable。这个大家对值类型与引用类型有所了解的话也会明白。
而且取值的时候不方便
Hashtable
在键值对集合当中,我们是根据键去找值的。键值对集合当中,键必须是唯一的,而值是可以重复的
键值对对象[键]=值;
基本使用
Hashtable ht = new Hashtable();
ht.Add(1, "张三");
ht.Add(2, true);
ht.Add(3, '男');
ht.Add(false, "错误的");
//遍历所有键为数字123的值
for (int i = 0; i < ht.Count; i++)
{
Console.WriteLine(ht[i]);
}
//在键值对集合中,是根据键去找值的
//比如:
Console.WriteLine(ht[false]);
遍历
Hashtable ht = new Hashtable();
ht.Add(1, "张三");
ht.Add(0, true);
ht.Add(3, '男');
ht.Add(false, "错误的");
//ht[5] = "asdf";//这样写是把键为5的值赋值为"asdf",这个[5]代表键,并不是下标的意思,
//如果当前键值对中不存在键为5的时候,就创建一个键5,存在这个键就给他重新赋值 这种添加方式不会报异常,而add方法添加如果有重复的键存在,会报异常
//遍历值,只不过只能给你命名空间的引用
foreach (var item in ht)//遍历整个键值对
{
Console.WriteLine(item);//输出的是命名空间
}
//遍历键
foreach (var item in ht.Keys)//遍历键值对的所有键
{
Console.WriteLine("键是:{0},值是 :{1}", item, ht[item]);//根据键输出值
}
//遍历值
foreach (var item in ht.Values)//遍历键值对的所有值
{
Console.WriteLine(item);//输出值
}
常用方法:
Contains():判断是否存在
ContainsKey():判断是否存在键
ContainsValue():判断是否存在值
Clear():移除所有元素
Remove():根据键移除元素(包括键本身)
Dictionary
使用方法
//键不能重复
Dictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(1,"张三");
dic.Add(2, "李四");
dic.Add(3, "王五");
dic[1] = "新来的";
//遍历键和值
//foreach (var item in dic)
//{
// //Console.WriteLine("键是:{0},值是:{1}",item.Key,dic[item.Key]);
// //或者
// Console.WriteLine("键是:{0},值是:{1}",item.Key,item.Value);
//}
////遍历键
//foreach (var item in dic.Keys)
//{
// Console.WriteLine("键是:{0}", item);
//}
//遍历键和值
foreach (KeyValuePair<int,string> kv in dic)
{
Console.WriteLine("键是:{0},值是:{1}", kv.Key, kv.Value);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构