【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]); } }
值为自定义类时同理。
/*******相与枕藉乎舟中,不知东方之既白*******/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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框架的用法!