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