当前位置: 首页 > news >正文

C# 字典(Dictionary)入门:从零开始掌握键值对集合

我们在C#开发中,经常需要存储成对的数据——例如“用户名”对应的“用户ID”、“商品编号”对应的“库存数量”等。这时Dictionary<TKey, TValue>字典,就是我们最得力的助手。

本文将带你从零开始,系统地学习字典的核心概念、常用操作以及背后的注意事项,每段代码都配有简洁注释,命名规范清晰,帮你快速上手。

1. 什么是字典?

字典是一种泛型集合,它存储的是键值对(Key-Value Pair)。每个键(Key)必须是唯一的,通过键可以快速找到对应的值(Value)。它的底层实现是哈希表,因此查找速度极快(接近 O(1))。

2. 创建字典

class Program { static void Main() { // 方式1:使用无参构造函数 Dictionary<string, int> studentScores = new Dictionary<string, int>(); // 方式2:指定初始容量(可优化性能) Dictionary<string, string> countryCapitals = new Dictionary<string, string>(10); // 方式3:集合初始化器(C# 3.0+) Dictionary<int, string> employeeNames = new Dictionary<int, string> { { 1001, "张三" }, { 1002, "李四" }, { 1003, "王五" } }; } }

3. 添加与访问元素

3.1 添加元素

// 使用 Add 方法添加(如果键已存在会抛出异常) studentScores.Add("小明", 95); studentScores.Add("小红", 88); // 使用索引器添加(如果键已存在,会覆盖旧值) studentScores["小刚"] = 78;

3.2 访问元素

// 通过键获取值(如果键不存在会抛出 KeyNotFoundException) int xiaomingScore = studentScores["小明"]; Console.WriteLine($"小明的成绩:{xiaomingScore}"); // 安全访问:使用 TryGetValue 避免异常 if (studentScores.TryGetValue("小华", out int score)) { Console.WriteLine($"小华的成绩:{score}"); } else { Console.WriteLine("未找到小华的成绩"); }

4. 遍历字典

4.1 遍历所有键值对

// 使用 foreach 遍历 KeyValuePair<TKey, TValue> foreach (KeyValuePair<string, int> kvp in studentScores) { Console.WriteLine($"学生:{kvp.Key},分数:{kvp.Value}"); } // 或者使用隐式类型 var foreach (var item in studentScores) { Console.WriteLine($"{item.Key} 的分数是 {item.Value}"); }

4.2 仅遍历键或值

// 遍历所有键 foreach (string name in studentScores.Keys) { Console.WriteLine($"学生姓名:{name}"); } // 遍历所有值 foreach (int score in studentScores.Values) { Console.WriteLine($"成绩:{score}"); }

5. 常用属性和方法

Count 获取字典中包含的键值对数量 Keys 获取包含所有键的集合 Values 获取包含所有值的集合 Clear() 移除所有元素 Remove(TKey) 移除指定键的元素,返回是否成功 Add(TKey, TValue) 添加指定的键值对 ContainsKey(TKey) 判断是否包含指定键 ContainsValue(TValue) 判断是否包含指定值(线性查找,效率较低) TryGetValue(TKey, out TValue) 尝试获取指定键的值,返回是否成功

6. 性能与注意事项

  1. 键的唯一性:字典不允许重复键,添加重复键会抛出ArgumentException。使用索引器赋值可以覆盖,但Add方法会抛出异常。

  2. 线程安全Dictionary<TKey, TValue>不是线程安全的。多线程环境请使用ConcurrentDictionary<TKey, TValue>或加锁。

  3. 容量优化:如果预先知道元素数量,在构造函数中指定容量可减少动态扩容带来的性能开销。

  4. 遍历时不能修改:在foreach遍历字典期间,不能执行添加、删除等修改操作,否则会抛出InvalidOperationException。如需修改,可先记录键再遍历。

总结

  • Dictionary<TKey, TValue>是 C# 中最常用的键值对集合,适合需要通过键快速查找值的场景。

  • 掌握Add、索引器、TryGetValueforeach遍历、Keys/Values等核心操作。

  • 注意键的唯一性、线程安全以及遍历时禁止修改的规则。

  • 自定义类型作为键时,务必重写EqualsGetHashCode

字典就像现实中的通讯录——通过姓名(键)快速找到电话号码(值)。理解并熟练运用字典,能让你的代码更加高效、清晰。

http://www.jsqmd.com/news/511826/

相关文章:

  • Python实战:用NumPy手撕SVD分解(附完整代码与可视化)
  • 智能邮件秘书:OpenClaw+Qwen3-32B自动分类与回复重要邮件
  • 连云港离婚律师推荐 适配各类复杂家事纠纷 - 讯息观点
  • 【Qclaw】Read HEARTBEAT.md if it exists (workspace context). Follow it strictly
  • 540万元奖金!2026年数学界“诺贝尔奖”揭晓
  • 解读汽车洗美服务选购要点,易漆修在京津地区排名如何 - 工业设备
  • 【大模型实践篇】Vanna:基于RAG的SQL生成框架从入门到精通的实战指南
  • 项目性能优化
  • 进程:pcb
  • DAY3学习
  • 键盘录入(Scanner)和if 语句
  • 计算机常用接口及用途
  • 党政机关如何正确使用 OpenClaw LOGO|含下载
  • 深入理解 SHA1 与 SHA256:从原理到量产级 C 语言实现
  • 南通合同纠纷律师推荐 适配各类需求 - 讯息观点
  • 2026年汽车美容服务费用分析,京津可靠企业Top10 - 工业品网
  • 基于Embedding模型微调的中文意图识别模型(18种意图)
  • java-modbus-读取-modbus4j
  • 用于光镊的Ince高斯光束
  • 聊聊千誉咨询可以信任吗,它在杭州企业中的口碑怎么样 - 工业品牌热点
  • LangChain 快速入门:从基础到生产级 AI 智能体搭建
  • jmeter学习记录
  • 题目2575:蓝桥杯2020年第十一届省赛真题-整除序列
  • 2025年OpenRouter免费模型大盘点:53个零成本AI工具全解析(含Grok-4 Fast/Nemotron Nano 9B V2)
  • 分析电商执照注册公司,杭州靠谱的品牌有哪些? - myqiye
  • 工业软件联动想象:SolidWorks模型命名与春联生成结合创意
  • DEAP数据集预处理避坑指南:从原始.mat文件到GCN-ready的图数据,我踩过的那些坑
  • 【2026最新】Bandizip免费下载:快速压缩解压工具(附安装包+图文步骤) - xiema
  • 破局与重构:大型企业级数字化业务运营平台的深度解构与演进之路(WORD)
  • 猫眼团购 mtgsig1.2算法分析