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

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

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

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

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

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

2026/8/4 9:42:39 阅读更多 →

最新新闻

5种高效方式:将SQLite Viewer无缝集成到你的Web项目中

5种高效方式:将SQLite Viewer无缝集成到你的Web项目中

5种高效方式:将SQLite Viewer无缝集成到你的Web项目中 【免费下载链接】sqlite-viewer View SQLite file online 项目地址: https://gitcode.com/gh_mirrors/sq/sqlite-viewer SQLite Viewer是一款强大的浏览器端SQLite数据库查看器,让你无需安装…

2026/8/4 10:35:01 阅读更多 →
华为OD机试 8月2号 新系统真题 【战士技能规划设计】

华为OD机试 8月2号 新系统真题 【战士技能规划设计】

战士技能规划设计(C/C++/Js/Java/Py/Go)题解 华为OD机试新系统真题 华为OD上机考试新系统真题 8月2号 200分题型 华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录|机考题库 + 算法考点详解 题目内容 你为一款动作游戏设计战士角色的技能:战士每个技能会消…

2026/8/4 10:35:01 阅读更多 →
Linux日志管理五大清空技巧与实战指南

Linux日志管理五大清空技巧与实战指南

1. HoRain云实战:Linux日志管理的五大清空技巧解析在Linux系统运维中,日志文件就像系统的"黑匣子",记录着每个关键操作的蛛丝马迹。但当日志体积膨胀到GB级别时,不仅会吞噬宝贵的磁盘空间,还会拖慢系统检索效…

2026/8/4 10:35:01 阅读更多 →
90年代游戏关卡设计的黄金法则与现代启示

90年代游戏关卡设计的黄金法则与现代启示

1. 为什么90年代游戏的关卡设计至今仍被怀念? 上周整理老游戏光盘时,翻出《超级马里奥64》和《塞尔达传说:时之笛》,随手试玩后突然意识到:这些90年代游戏的关卡设计,比现在很多3A大作的开放世界地图更让人…

2026/8/4 10:35:01 阅读更多 →
10分钟快速搭建个人云游戏服务器:Sunshine完整自托管游戏串流终极指南

10分钟快速搭建个人云游戏服务器:Sunshine完整自托管游戏串流终极指南

10分钟快速搭建个人云游戏服务器:Sunshine完整自托管游戏串流终极指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否梦想过在任何设备上流畅游玩PC游戏&#x…

2026/8/4 10:35:01 阅读更多 →
绝区零自动化助手:5大核心功能助你轻松游戏

绝区零自动化助手:5大核心功能助你轻松游戏

绝区零自动化助手:5大核心功能助你轻松游戏 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 绝区零一条龙&#…

2026/8/4 10:34:01 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →