【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 @ 2021-09-27 16:44  不溯流光  阅读(503)  评论(0编辑  收藏  举报