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);

            }
posted @   青仙  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· .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语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示