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/10/2 1:01:49 阅读更多 →
跨平台开发新趋势:这5大混合工具如何用AI重塑应用生态

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

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

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

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

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

2026/10/12 20:11:01 阅读更多 →

最新新闻

【K8s】初识PV和PVC

【K8s】初识PV和PVC

相关文章: 【K8s】初识PV和PVC 【k8s】存储 pv 参数列表 【k8s】存储 pvc 参数列表 概述 起初,我们直接在pod yml中定义存储,但是缺点是死板,且不好管理存储的生命周期后来有了pv和pvc,我们可以管理存储了&#xff0…

2026/10/14 1:46:14 阅读更多 →
Java线程池从参数解析到线上事故复盘:ThreadPoolExecutor核心机制与实战陷阱

Java线程池从参数解析到线上事故复盘:ThreadPoolExecutor核心机制与实战陷阱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:46:14 阅读更多 →
STM32+华为云IoT+Qt全栈实战:从传感器到远程控制完整链路

STM32+华为云IoT+Qt全栈实战:从传感器到远程控制完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:46:14 阅读更多 →
LeagueReplayParser:.rofl重播文件离线解析实战指南

LeagueReplayParser:.rofl重播文件离线解析实战指南

简介:这是一份面向C#开发者与《英雄联盟》数据爱好者的技术工具库,用于解析.rofl格式的客户端重播文件,提取版本信息、对局元数据并触发本地重播,适用于游戏数据分析、自动化回放调试及轻量级LOL辅助工具开发。资源包为505KB的ZIP…

2026/10/14 1:46:14 阅读更多 →
LEF/DEF物理设计文件解析:从5.8手册语法到自动检查脚本

LEF/DEF物理设计文件解析:从5.8手册语法到自动检查脚本

简介:LEF/DEF 5.8语言参考是Cadence官方发布的EDA领域重要规范文档,面向数字IC后端设计工程师、物理验证人员和EDA工具开发者。文档系统阐述了LEF(库交换格式)与DEF(设计交换格式)的定义,前者覆…

2026/10/14 1:46:14 阅读更多 →
2020年VM Pro16.1.0注册、安装以及使用教程

2020年VM Pro16.1.0注册、安装以及使用教程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 1:45:13 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →