你在写程序时,有没有遇到过这种场景:要根据一个名字快速找到对应的年龄、手机号或用户权限?比如登录系统后,根据用户名立刻拿到他的角色等级;或者读取配置文件,按键名取值。这时候,Dictionary<TKey, TValue> 就是你的得力助手。
字典不是数组,也不是列表
刚学 C# 的朋友容易把 Dictionary 和 List<T> 搞混。List 是靠下标(0、1、2…)找元素,而 Dictionary 靠的是“键”(key)——就像电话簿里查人,你输“张三”,它立马翻出号码,不用从第一页开始数。
怎么声明和用?上手就跑通
最常见的是字符串当键、整数当值:
var userScores = new Dictionary<string, int>();
userScores["小明"] = 95;
userScores["小红"] = 87;
userScores["小刚"] = 92;取值也直白:
int xiaoMingScore = userScores["小明"]; // 得到 95注意:如果键不存在,直接用方括号访问会抛异常。更稳妥的写法是用 TryGetValue:
if (userScores.TryGetValue("小李", out int score))
{
Console.WriteLine($"小李分数:{score}");
}
else
{
Console.WriteLine("还没录入小李的成绩");
}键必须唯一,值可以重复
字典里,“小明”只能有一个,不能有两个“小明”键。但他们的分数可以一样——比如“小明”和“小王”都考了 95 分,完全没问题。
常用操作顺手记
判断是否存在某个人:userScores.ContainsKey("小红")
删掉一个人:userScores.Remove("小刚")
遍历所有人和分数:
foreach (var kvp in userScores)
{
Console.WriteLine($"{kvp.Key}:{kvp.Value}");
}输出就是:
小明:95
小红:87
小提醒:别用可变对象当键
如果你用自定义类(比如 User)做键,记得重写 GetHashCode() 和 Equals(),否则字典可能找不到你存进去的东西。初学者建议先用 string、int、Guid 这类“老实本分”的类型当键,稳得很。
字典不是玄学,它就是帮你把“名字 ↔ 数据”这对关系管得明明白白的工具。下次再想“按名取值”,别急着写循环,先想想:我是不是该用个 Dictionary?