【C#】Dictionary使用汇总

 


一、用法

1、排序

//字典按键值升序排序
dic = dic.OrderBy(p => p.Key).ToDictionary(p => p.Key, o => o.Value);    
//字典按键值降序排序                
dic = dic.OrderByDescending(p => p.Key).ToDictionary(p => p.Key, o => o.Value);

 

2、遍历

复制代码
//遍历Key和Value
for (int i = 0; i < dic.Count; i++)
    Console.WriteLine($"Key:{dic.Keys.ToArray()[i]},Value:{dic.Values.ToArray()[i]}");
foreach(KeyValuePair<int, string> kvp in dic)
    Console.WriteLine($"Key:{kvp.Key},Value:{kvp.Value}");

//遍历Key
foreach(var key in dic.Keys)
    Console.WriteLine($"Key:{key}");

//遍历Value
foreach(var value in dic.Values)
    Console.WriteLine($"Value:{value}");    
复制代码

 

3、根据Key值取Value

//确定key在字典集中存在
string value = dic[1];
//不确定key是否存在字典集当中
value = dic.FirstOrDefault(d=>d.key == 1).Value;

 

4、根据Value值取Key

复制代码
//lambada表达式
int key = dic.FirstOrDefault(d => d.Value == "李四").Key;
//linq to object
key = (from query in dic.AsEnumerable()
       where query.Value == "王五"
       select new 
       { 
               query.Key 
       }
       ).Select(d => d.Key).ToList().FirstOrDefault();
复制代码

 

5、判断Key或Value是否存在

复制代码
//判断Key是否存在
bool keyBool = false;
keyBool = dic.Keys.Contain(key);
keyBool = dic.ContainsKey(key);

//判断Value是否存在
bool valueBool = false;
valueBool = dic.Values.Contain(key);
valueBool = dic.ContainsValue(key);
复制代码

 

6、移除元素

//移除单个元素
dic.Remove(key);
//移除所有
dic.Clear();

 

二、常见问题

1、值是数组,根据键名修改值时字典中所有值都被修改

向字典中添加值时,必须重新命名一个数组再赋值给字典(因为字典表中的值如果是数组,存储是数组的首项地址,存储的是一个引用地址):

错误:

复制代码
            Dictionary<string, Array> Dict = new Dictionary<string, Array>();
            string[] TableInfo = new string[2];
            TableInfo[0] = "Computer";
            TableInfo[1] = "16";
            Dict.Add("计算机", TableInfo);
 
            TableInfo[0] = "Printer";
            TableInfo[1] = "8";
            Dict.Add("打印机", TableInfo);
 
            TableInfo[0] = "Scanner";
            TableInfo[1] = "7";
            Dict.Add("扫描仪", TableInfo);
复制代码

正确:

复制代码
            Dictionary<string, Array> Dict = new Dictionary<string, Array>();
            string[] TableInfo1 = new string[2];
            TableInfo1[0] = "Computer";
            TableInfo1[1] = "16";
            Dict.Add("计算机", TableInfo1);
 
            string[] TableInfo2 = new string[2];
            TableInfo2[0] = "Printer";
            TableInfo2[1] = "8";
            Dict.Add("打印机", TableInfo2);
 
            string[] TableInfo3 = new string[2];
            TableInfo3[0] = "Scanner";
            TableInfo3[1] = "7";
            Dict.Add("扫描仪", TableInfo3);
 
            string[] AA1 = new string[2];
 
            foreach (var item in Dict)
            {
                listBox1.Items.Add(item.Key);
                AA1 = (string[])Dict[item.Key];
                for (int i = 0; i < AA1.Length; i++)
                {
                    listBox1.Items.Add(AA1[i]);
                }
            }
复制代码

值为自定义类时同理。

参考

 

链接

posted @   不溯流光  阅读(579)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示