Dictionary字典在C#中至关重要日常开发用的也很频繁,它是以键值对key、value的形式存值,和哈希表比较像,是一种无序的结构。我们在使用Dictionary时必须先using引用命名空间 System.Collection.Generic后才能正常使用。
接下来我们列举一下Dictionary中常用的属性、方法以及特点,本文编写的例子下载地址:Tests.zip(密码:7831)

字典键key必须唯一
字典键和字典值可以是引用类型对象、结构体和值类型数据

常用属性

属性描述
Keys字典键集合
Values字典值集合
Count字典内元素数量

常用方法

属性描述
Add新增字典元素,当字典键存在时,抛出异常
TryAdd尝试将指定的键和值添加到字典中,字典键存在时返回false表示新增失败且不会抛出异常
Remove移除字典集合内指定键数据
Reverse将字典集合反序排序
ContainsKey搜索字典键是否存在于字典集合中,存在返回true不存在返回false
ContainsValue搜索字典值是否存在于字典集合中,存在返回true不存在返回false
First获取字典集合内第一个键、值元素;若字典集合长度为0会抛出异常Sequence contains no matching element,支持lambda表达式查询
FirstOrDefault获取字典集合内第一个键、值元素;若字典集合长度为0不抛出异常并且返回null值,支持lambda表达式查询
Where按条件搜索字典集合中符合条件的结果集,支持lambda表达式查询
ElementAt获取字典集合中指定下标键、值元素
Except与另一个同类型结构的字典结果集比较并获取两个字典结果集之间的差集
Intersect与另一个同类型结构的字典结果集比较并获取两个字典结果集之间的交集
Union与另一个同类型结构的字典结果集比较并获取两个字典结果集之间的并集

Dictionary常用的属性、方法已经列举完毕,接下来附上常用属性、方法的使用代码供大家参考。

Add&TryAdd用法

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tests
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Dictionary<string, string> dict_test = new Dictionary<string, string>();
            //新增字典键、值;字典键不能重复,字典值允许重复
            dict_test.Add("1", "1");
            dict_test.Add("2", "1");
            dict_test.Add("3", "1");
            dict_test.Add("4", "1");
            dict_test.Add("5", "1");
            //尝试添加键、值
            var tflag1 = dict_test.TryAdd("1", "2");
            Console.WriteLine($"尝试添加重复键1,结果:{tflag1}");
            var tflag2 = dict_test.TryAdd("6", "1");
            Console.WriteLine($"尝试添加非重复键6,结果:{tflag2}");
            Console.ReadLine();
        }
    }
}

c#字典Add&TryAdd用法

Reverse用法

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tests
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Dictionary<string, string> dict_test = new Dictionary<string, string>();
            //新增字典键、值;字典键不能重复,字典值允许重复
            dict_test.Add("1", "1");
            dict_test.Add("2", "1");
            dict_test.Add("3", "1");
            dict_test.Add("4", "1");
            dict_test.Add("5", "1");
          
            //对字典集合进行反序生成一个新的集合
            var dict_new = dict_test.Reverse();
            Console.WriteLine($"反序后的字典排序:{string.Join(',', dict_new.Select(s => s.Key))}");
            Console.ReadLine();
        }
    }
}

c#字典Reverse用法

Remove用法

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tests
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Dictionary<string, string> dict_test = new Dictionary<string, string>();
            //新增字典键、值;字典键不能重复,字典值允许重复
            dict_test.Add("1", "1");
            dict_test.Add("2", "1");
            dict_test.Add("3", "1");
            dict_test.Add("4", "1");
            dict_test.Add("5", "1");
          
            //移除字典集合指定键元素
            dict_test.Remove("1");
            Console.WriteLine($"移除字典键为1的元素,移除后还剩键:{string.Join(',', dict_test.Keys)}");

            Console.ReadLine();
        }
    }
}

c#字典Remove用法

ContainsKey&ContainsValue用法

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tests
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Dictionary<string, string> dict_test = new Dictionary<string, string>();
            //新增字典键、值;字典键不能重复,字典值允许重复
            dict_test.Add("1", "1");
            dict_test.Add("2", "1");
            dict_test.Add("3", "1");
            dict_test.Add("4", "1");
            dict_test.Add("5", "1");
           

            //搜索字典集合内指定键元素是否存在
            Console.WriteLine($"搜索键为2的元素,结果:{dict_test.ContainsKey("2")}");
            //搜索字典集合内指定值元素是否存在
            Console.WriteLine($"搜索值为1的元素,结果:{dict_test.ContainsValue("1")}");

            Console.ReadLine();
        }
    }
}

ContainsKey&ContainsValue用法

First&FirstOrDefault&Where用法

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tests
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Dictionary<string, string> dict_test = new Dictionary<string, string>();
            //新增字典键、值;字典键不能重复,字典值允许重复
            dict_test.Add("1", "1");
            dict_test.Add("2", "1");
            dict_test.Add("3", "1");
            dict_test.Add("4", "1");
            dict_test.Add("5", "1");

            //First方法查询
            var first_vle = dict_test.First(s => s.Key == "1" && s.Value == "1");
            Console.WriteLine($"First查询结果:{first_vle}");

            //FirstOrDefault方法查询
            var def_vle = dict_test.FirstOrDefault(s => s.Key == "5" && s.Value == "1");
            Console.WriteLine($"FirstOrDefault查询结果:{def_vle}");
            
            //Where方法查询
            var whr_vle = dict_test.Where(s => s.Value == "1");
            Console.WriteLine($"Where查询结果个数:{whr_vle.Count()}");
            Console.ReadLine();
        }
    }
}

c#字典First&FirstOrDefault&Where用法

Except&Intersect&Union用法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Tests
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Dictionary<string, string> dict_test = new Dictionary<string, string>();
            //新增字典键、值;字典键不能重复,字典值允许重复
            dict_test.Add("1", "1");
            dict_test.Add("2", "1");
            dict_test.Add("3", "1");
            dict_test.Add("4", "1");
            dict_test.Add("5", "1");

            Dictionary<string, string> dict_sec = new Dictionary<string, string>();
            //新增字典键、值;字典键不能重复,字典值允许重复
            dict_sec.Add("1", "1");
            dict_sec.Add("2", "1");
            dict_sec.Add("7", "1");
            dict_sec.Add("8", "1");
            dict_sec.Add("9", "1");
          
            //取两个字典集合之间的差集,不分先后顺序
            var exc_list = dict_test.Except(dict_sec);
            Console.WriteLine($"差集是:{string.Join(',', exc_list.Select(s => s.Key))}");

            //取两个字典集合之间的交集,不分先后顺序
            var ins_list = dict_test.Intersect(dict_sec);
            Console.WriteLine($"交集是:{string.Join(',', ins_list.Select(s => s.Key))}");

            //取两个字典集合之间的并集,不分先后顺序
            var uin_list = dict_test.Union(dict_sec);
            Console.WriteLine($"并集是:{string.Join(',', uin_list.Select(s => s.Key))}");

            Console.ReadLine();
        }
    }
}

c#字典Except Intersect Union用法

最后修改:2022 年 09 月 30 日
免责声明:本站为个人博客,博客所发布的一切修改补丁、注册机和注册信息及软件的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途。否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。访问和下载本站内容,说明您已同意上述条款。