C# 字典(Dictionary)完全指南:从基础到高级应用
1. 什么是 C# 字典字典Dictionary是 C# 中最常用的集合类型之一它表示键值对的集合其中每个键必须是唯一的。字典基于哈希表实现提供了快速的查找、插入和删除操作。2. 字典的基本用法2.1 创建和初始化字典以下是创建字典的几种常用方式// 方式1使用构造函数 Dictionarystring, int scores new Dictionarystring, int(); // 方式2使用集合初始化器 Dictionarystring, string capitals new Dictionarystring, string { { China, Beijing }, { USA, Washington D.C. }, { Japan, Tokyo } }; // 方式3使用索引初始化器C# 6.0 Dictionarystring, int ages new Dictionarystring, int { [Alice] 25, [Bob] 30, [Charlie] 35 };2.2 添加和访问元素// 添加元素 Dictionarystring, int inventory new Dictionarystring, int(); inventory.Add(Apples, 50); inventory[Oranges] 30; // 使用索引器添加或修改 // 访问元素 int appleCount inventory[Apples]; // 直接访问 Console.WriteLine($苹果数量{appleCount}); // 安全访问避免 KeyNotFoundException if (inventory.TryGetValue(Bananas, out int bananaCount)) { Console.WriteLine($香蕉数量{bananaCount}); } else { Console.WriteLine(未找到香蕉); }2.3 更新和删除元素// 更新元素 inventory[Apples] 60; // 直接赋值更新 // 删除元素 inventory.Remove(Oranges); // 删除指定键 inventory.Clear(); // 清空所有元素3. 字典的常用属性和方法属性/方法说明示例Count获取字典中键值对的数量int count inventory.Count;Keys获取包含所有键的集合foreach (string key in inventory.Keys)Values获取包含所有值的集合foreach (int value in inventory.Values)ContainsKey检查是否包含指定键bool hasKey inventory.ContainsKey(Apples);ContainsValue检查是否包含指定值bool hasValue inventory.ContainsValue(50);TryAdd尝试添加键值对.NET Core 2.0bool added inventory.TryAdd(Pears, 40);4. 遍历字典4.1 使用 foreach 循环// 遍历所有键值对 foreach (KeyValuePairstring, int item in inventory) { Console.WriteLine(${item.Key}: {item.Value}); } // 只遍历键 foreach (string key in inventory.Keys) { Console.WriteLine($键{key}); } // 只遍历值 foreach (int value in inventory.Values) { Console.WriteLine($值{value}); }4.2 使用 LINQ 查询// 筛选值大于 20 的项 var filtered inventory.Where(kvp kvp.Value 20); // 按值排序 var sorted inventory.OrderBy(kvp kvp.Value); // 转换为其他集合 Liststring keysList inventory.Keys.ToList(); int[] valuesArray inventory.Values.ToArray();5. 字典的高级特性5.1 自定义键的相等比较器// 创建不区分大小写的字符串键字典 Dictionarystring, int caseInsensitiveDict new Dictionarystring, int( StringComparer.OrdinalIgnoreCase ); caseInsensitiveDict[Apple] 10; int value caseInsensitiveDict[APPLE]; // 可以找到值为 105.2 线程安全的字典ConcurrentDictionaryusing System.Collections.Concurrent; ConcurrentDictionarystring, int concurrentDict new ConcurrentDictionarystring, int(); // 线程安全的添加和更新 concurrentDict.TryAdd(Item1, 100); concurrentDict.AddOrUpdate(Item1, 200, (key, oldValue) oldValue 50);5.3 只读字典IReadOnlyDictionaryIReadOnlyDictionarystring, int readOnlyDict inventory; // 只能读取不能修改 int count readOnlyDict.Count; bool exists readOnlyDict.ContainsKey(Apples);6. 性能考虑和最佳实践选择合适的键类型键类型应正确实现GetHashCode()和Equals()方法预估容量如果知道大致元素数量可以在构造函数中指定初始容量以提高性能避免频繁扩容字典在元素数量超过容量时会自动扩容这是一个相对昂贵的操作使用 TryGetValue 避免异常比直接使用索引器更安全且性能更好考虑使用 ConcurrentDictionary在多线程环境下需要线程安全的字典操作时7. 常见问题解答Q1字典和哈希表有什么区别DictionaryTKey, TValue是泛型类型安全的性能更好推荐使用。Hashtable是非泛型的存储 object 类型需要装箱拆箱性能较差。Q2字典的键可以是 null 吗取决于键类型的定义。对于引用类型默认情况下键可以为 null但自定义比较器可能会改变这一行为。Q3如何实现字典的深拷贝// 浅拷贝共享值引用 Dictionarystring, Listint original new Dictionarystring, Listint(); Dictionarystring, Listint shallowCopy new Dictionarystring, Listint(original); // 深拷贝需要复制值 Dictionarystring, Listint deepCopy original.ToDictionary( kvp kvp.Key, kvp new Listint(kvp.Value) );8. 总结C# 字典是处理键值对数据的强大工具具有优秀的查找性能和丰富的功能。掌握字典的基本操作、高级特性和最佳实践能够帮助你在实际开发中更高效地处理数据集合。

相关新闻

ROS2从入门到实战:去中心化机器人操作系统详解

ROS2从入门到实战:去中心化机器人操作系统详解

本文是独立成篇的 ROS2 笔记,涵盖从命令行到仿真的全链路。建议配合 Ubuntu 22.04 Humble 食用。1. 什么是 ROS2?为什么要用它?ROS 全称 Robot Operating System,它不是传统意义的操作系统(像 Linux/Windows&#xff…

2026/8/4 9:43:00 阅读更多
跨平台开发新趋势:这5大混合工具如何用AI重塑应用生态

跨平台开发新趋势:这5大混合工具如何用AI重塑应用生态

在数字化转型的浪潮中,跨平台混合开发技术已成为企业降本增效的利器。它通过一套代码实现多端运行,显著提升了开发效率并降低了维护成本。随着AI技术的迅猛发展,AI能力正成为混合开发工具的新核心竞争力。 尤其值得关注的是,支付…

2026/8/4 9:43:00 阅读更多
【单片机毕业设计推荐】基于 STM32 的语音识别智能垃圾分类桶设计与实现 基于 STM32 单片机的语音唤醒式智能垃圾桶系统设计(013105)

【单片机毕业设计推荐】基于 STM32 的语音识别智能垃圾分类桶设计与实现 基于 STM32 单片机的语音唤醒式智能垃圾桶系统设计(013105)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能技术路线项目演示关于我们项目案例源码获取温馨提示:本人主页置顶文章(点我)有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)有 CSDN 平台官…

2026/8/4 9:43:00 阅读更多
JSP混合编程实战:矩阵运算与表格输出技巧

JSP混合编程实战:矩阵运算与表格输出技巧

1. JSP混合编程实战:矩阵与表格输出项目概述最近在整理教学资料时,翻到一个经典的JSP混合编程练习——矩阵与表格输出。这个看似简单的作业实际上涵盖了JSP开发中的多个核心技术点,包括脚本元素使用、JavaBean封装、EL表达式以及前端表格渲染…

2026/8/4 10:53:02 阅读更多
Java并发编程面试核心知识点与实战技巧

Java并发编程面试核心知识点与实战技巧

1. Java并发面试题的价值与定位Java并发编程一直是面试中的"死亡区域",也是区分普通开发者和资深工程师的重要分水岭。我整理这份题库的初衷,源于自己作为面试官时的一个发现:80%的候选人在面对"请解释Java内存模型"这类…

2026/8/4 10:53:02 阅读更多
Python+Django+Vue构建高校实验室管理系统实践

Python+Django+Vue构建高校实验室管理系统实践

1. 项目概述:学校实验室管理系统的技术选型与实践 实验室管理一直是高校信息化建设中的痛点。传统纸质登记方式效率低下,设备借用记录混乱,耗材库存难以实时监控。我去年为某高校开发的实验室管理系统,采用PythonDjangoVue技术栈&…

2026/8/4 10:53:02 阅读更多
AI如何重塑PPT制作:从NLP到视觉设计的全流程解析

AI如何重塑PPT制作:从NLP到视觉设计的全流程解析

1. 项目概述:AI如何重塑PPT制作体验 第一次听说paperzz这个工具是在上周的团队周会上,当时市场部同事用3分钟生成了一个让我眼前一亮的融资路演PPT。作为常年被PPT折磨的咨询顾问,我立刻意识到这可能是改变我们工作流的革命性工具。 传统PPT…

2026/8/4 10:53:02 阅读更多
3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些年发过的QQ空间说说,那些记录青春的文字…

2026/8/3 12:53:38 阅读更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是应用材料(Applied Materials)公司生产的一款用于半导体设备的I/O信号分配电路板。该型号(0100-02186)的核心特点如下:专用于Endura等半导体工艺腔室。集成信号路由与分配功能。连接控制…

2026/8/3 19:34:52 阅读更多
Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机是日本日清(Nissei)品牌的一款工业用三相异步电机,适用于自动化设备及通用机械驱动。该型号(FFMN-32L-10-T0 40AX)的核心特点如下:三相交流异步电动机。额定…

2026/8/3 19:34:54 阅读更多