基本概念
Dictionary<TKey, TValue>
是C#中用于存储键值对集合的泛型类,属于System.Collections.Generic
命名空间。它允许使用键(Key
)来访问与其关联的值(Value
)。其中,TKey表示字典中键的类型,TValue表示字典中值的类型。
Dictionary的基本结构
键(Key):唯一标识集合中的一个元素。键是唯一的,不能有重复。
值(Value):与键相关联的数据。值可以是任意类型,并且可以有重复。
键值对(KeyValuePair):键和值的组合,表示Dictionary中的一个元素。
Dictionary的主要特性
快速访问:通过键可以快速检索到对应的值,平均时间复杂度接近O(1),因为
Dictionary<TKey,TValue>
类是作为哈希表实现。唯一键(Key):每个键在Dictionary中都是唯一的,不能重复。
动态大小:Dictionary的大小可以动态调整,当元素数量超过容量时,它会自动扩容。
无序集合:Dictionary中的元素是无序的,不能通过索引来访问它们。
Dictionary的常用操作
以下是C#中Dictionary的常用操作完整代码,其中包括添加元素、访问元素、修改元素、删除元素、检查键或值是否存在,以及遍历元素:
public static void DictionaryOperation()
{
//创建一个Dictionary来存储学生学号ID和姓名
Dictionary<int, string> studentDic = new Dictionary<int, string>();
#region 添加元素
// Add方法(键必须唯一)
studentDic.Add(1, "大姚");
studentDic.Add(2, "小袁");
studentDic.Add(3, "Edwin");
// 索引器语法(键不存在时添加,存在时更新)
studentDic[4] = "Charlie";
studentDic[5] = "追逐时光者";
// 安全添加(避免异常)
bool isAdded = studentDic.TryAdd(6, "小明"); // 返回 false,因键已存在
#endregion
#region 访问元素
// 直接访问(键必须存在,否则会有异常)
var currentUserName = studentDic[1];
Console.WriteLine($"当前学生姓名: {currentUserName}");
// 安全访问(避免异常)
if (studentDic.TryGetValue(5, outvar getUserName))
{
Console.WriteLine($"UserName:{getUserName}");
}
else
{
Console.WriteLine("当前学生ID不存在");
}
#endregion
#region
// 修改元素
studentDic[2] = "大西瓜";
Console.WriteLine($"修改后的名称:{studentDic[2]}");
#endregion
#region 删除元素
// 删除元素
bool isRemoved = studentDic.Remove(3);
Console.WriteLine($"删除结果:{isRemoved}");
#endregion
#region 检查键或值是否存在
// 检查键是否存在
if (studentDic.ContainsKey(1))
{
Console.WriteLine("存在");
}
else
{
Console.WriteLine("不存在");
}
bool isExistcontainsValue = studentDic.ContainsValue("追逐时光者");
Console.WriteLine($"是否存在:{isExistcontainsValue}");
#endregion
#region 遍历元素
// 遍历元素
foreach (KeyValuePair<int, string> student in studentDic)
{
Console.WriteLine($"ID: {student.Key}, Name: {student.Value}");
}
// 使用键的枚举器
foreach (var key in studentDic.Keys)
{
Console.WriteLine($"Key: {key}, Value: {studentDic[key]}");
}
// 使用值的枚举器
foreach (varvaluein studentDic.Values)
{
// 注意:这种方式不能直接获取键,只能获取值
Console.WriteLine($"Value: {value}");
}
#endregion
}
参考文章
https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic.dictionary-2?view=net-9.0
DotNetGuide编程学院
DotNetGuide编程学院是一个专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享的知识星球!当然这里不仅仅只有C#/.NET/.NET Core还有前端、云原生(Docker,K8s)、分布式,微服务、实用工具、学习书籍、AIGC、AI赋能、求职和招聘资讯、热点资讯等多个领域,我们致力于构建一个积极向上、和谐友善的.NET技术交流、学习平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。
🎯 初衷:打造全网最纯粹、硬核、干货的.NET学习圈子(理论&实践)!!!
💥 十年之约:大姚跟大家承诺一个 10 年之约,会持续在DotNetGuide编程学院中分享至少 10 年,携手和大家一起学习、成长、共同进步!!!
大姚发放了100张DotNetGuide编程学院知识星球68元新人立减优惠券,有兴趣的小伙伴可以领券加入(当前应该是星球最优惠的阶段),加入后如果感觉不值得,3天内知识星球APP右上角退出,直接全额退款,无任何套路!



免费开源的程序员简历模板
了解作者&获取更多学习资料
程序员常用的开发工具软件推荐
加入DotNetGuide技术社区交流群
.NET/.NET Core ORM框架资源汇总
C#/.NET/.NET Core开发者学习路线集
学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江海!