C#之 Dictionary 详解
基本概念
Dictionary<TKey, TValue>是C#中用于存储键值对集合的泛型类,属于System.Collections.Generic命名空间。它允许使用键(Key)来访问与其关联的值(Value)。其中,TKey表示字典中键的类型,TValue表示字典中值的类型。
Dictionary的基本结构
- 键(Key):唯一标识集合中的一个元素。键是唯一的,不能有重复。
- 值(Value):与键相关联的数据。值可以是任意类型,并且可以有重复。
- 键值对(KeyValuePair):键和值的组合,表示Dictionary中的一个元素。
Dictionary的主要特性
- 快速访问:通过键可以快速检索到对应的值,平均时间复杂度接近O(1),因为
Dictionary<TKey,TValue>类是作为哈希表实现。 - 唯一键(Key):每个键在Dictionary中都是唯一的,不能重复。
- 动态大小:Dictionary的大小可以动态调整,当元素数量超过容量时,它会自动扩容。
- 无序集合:Dictionary中的元素是无序的,不能通过索引来访问它们。
Dictionary的常用操作
以下是C#中Dictionary的常用操作完整代码,其中包括添加元素、访问元素、修改元素、删除元素、检查键或值是否存在,以及遍历元素:
public static void DictionaryOperation()
{
//创建一个Dictionary来存储学生学号ID和姓名
Dictionary<int, string> studentDic = new Dictionary<int, string>();
#region 添加元素
// Add方法(键必须唯一)
studentDic.Add(1, "大姚");
studentDic.Add(2, "小袁");
studentDic.Add(3, "Edwin");
// 索引器语法(键不存在时添加,存在时更新)
studentDic[4] = "Charlie";
studentDic[5] = "追逐时光者";
// 安全添加(避免异常)
bool isAdded = studentDic.TryAdd(6, "小明"); // 返回 false,因键已存在
#endregion
#region 访问元素
// 直接访问(键必须存在,否则会有异常)
var currentUserName = studentDic[1];
Console.WriteLine($"当前学生姓名: {currentUserName}");
// 安全访问(避免异常)
if (studentDic.TryGetValue(5, outvar getUserName))
{
Console.WriteLine($"UserName:{getUserName}");
}
else
{
Console.WriteLine("当前学生ID不存在");
}
#endregion
#region
// 修改元素
studentDic[2] = "大西瓜";
Console.WriteLine($"修改后的名称:{studentDic[2]}");
#endregion
#region 删除元素
// 删除元素
bool isRemoved = studentDic.Remove(3);
Console.WriteLine($"删除结果:{isRemoved}");
#endregion
#region 检查键或值是否存在
// 检查键是否存在
if (studentDic.ContainsKey(1))
{
Console.WriteLine("存在");
}
else
{
Console.WriteLine("不存在");
}
bool isExistcontainsValue = studentDic.ContainsValue("追逐时光者");
Console.WriteLine($"是否存在:{isExistcontainsValue}");
#endregion
#region 遍历元素
// 遍历元素
foreach (KeyValuePair<int, string> student in studentDic)
{
Console.WriteLine($"ID: {student.Key}, Name: {student.Value}");
}
// 使用键的枚举器
foreach (var key in studentDic.Keys)
{
Console.WriteLine($"Key: {key}, Value: {studentDic[key]}");
}
// 使用值的枚举器
foreach (varvaluein studentDic.Values)
{
// 注意:这种方式不能直接获取键,只能获取值
Console.WriteLine($"Value: {value}");
}
#endregion
}
参考文章
- https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic.dictionary-2?view=net-9.0
C#之 Dictionary 详解的更多相关文章
- C#中Hashtable、Dictionary详解以及写入和读取对比
转载:http://www.cnblogs.com/chengxingliang/archive/2013/04/15/3020428.html 在本文中将从基础角度讲解HashTable.Dicti ...
- C# 集合之Dictionary详解
开讲. 我们知道Dictionary的最大特点就是可以通过任意类型的key寻找值.而且是通过索引,速度极快. 该特点主要意义:数组能通过索引快速寻址,其他的集合基本都是以此为基础进行扩展而已. 但其索 ...
- 1、C#中Hashtable、Dictionary详解以及写入和读取对比
在本文中将从基础角度讲解HashTable.Dictionary的构造和通过程序进行插入读取对比. 一:HashTable 1.HashTable是一种散列表,他内部维护很多对Key-Value键值对 ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- ASP.NET Core的配置(2):配置模型详解
在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...
- Ajax.ActionLink参数详解
该语法会生成一个a标签,点击a标签会执行一个Ajax请求. 有12个方法重载,下面详解方法中的各项参数: 参数一:linkText string类型 说明:链接显示的文字内容 参数二:actionNa ...
- Ajax.BeginForm参数详解
在Asp.Net的MVC中的语法,在Razor页面中使用,替代JQuery的Ajax使用,方便快捷. 使用Ajax.BeginForm方法会生成一个form表单,最后以Ajax的方式提交表单数据:需要 ...
- Cocos2d-x 3.X手游开发实例详解
Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...
- AFNetworking 与 UIKit+AFNetworking 详解
资料来源 : http://github.ibireme.com/github/list/ios GitHub : 链接地址 简介 : A delightful iOS and OS X networ ...
- SUBLIME TEXT 2 设置文件详解
SUBLIME TEXT 2 设置文件详解 Preferences.sublime-settings文件: // While you can edit this file, it’s best to ...
随机推荐
- 用Python让两组数据纵向排序
一.引言 在数据处理和分析中,排序是一项非常基础且重要的操作.排序可以帮助我们更好地理解数据,发现数据中的模式和规律.在Python中,我们可以使用多种方法对数据进行排序.本文将详细介绍如何使用Pyt ...
- 黑苹果(Hackintosh) - 问题,修改CPU数量和内存数量后,系统重启失败
1. 问题复现 安装完黑苹果后,内存默认的 1个处理器2个核心.2G内存,发现不够用. 于是,修改了 VMware 对此系统的 硬件配置 内存: 2G -> 8G 处理器:1个处理器 -> ...
- RxSqlUtils(base R2dbc)
一.前言 随着 Solon 3.0 和 Solon-Rx 3.0 发布,又迎来了的 RxSqlUtils 扩展插件,用于"响应式"操作数据库.RxSqlUtils 是基于 R2db ...
- 揭秘vivo百亿级厂商消息推送平台的高可用技术实践
本文由vivo 互联网服务器团队Yu Quan分享,本文收录时有内容修订和重新排版. 1.引言 如今,Android端的即时通讯IM这类应用想实现离线消息推送,难度越来越大(详见<Android ...
- IM跨平台技术学习(五):融云基于Electron的IM跨平台SDK改造实践总结
本文由融云技术团队分享,有修订和改动. 1.引言 Electron 凭借其相对更低的研发成本投入.强大的跨平台支持.拥有基数庞大的 Javascript 开发者受众等优势,在 PC 端跨平台桌面开发领 ...
- Web网页端IM产品RainbowChat-Web的v4.1版已发布
一.关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIM ...
- 神仙打架的一期「GitHub 热点速览」
由于上周出月刊「GitHub 热点速览」断更了一期,本期攒了两周的热门开源项目,真可谓是神仙打架! 这两天开源的大模型 DeepSeek-V3 凭借极低的训练成本和出色的评测表现,迅速出圈.开源仅 5 ...
- C#/.NET/.NET Core优秀项目和框架2024年12月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的详细介绍.功能特点.使用方式以及部分功能 ...
- (.net core)Kong网关的使用
一.优势: 提供统一的 API 管理,简化流量控制.负载均衡.安全性控制等工作. 有可视化界面可操作,支持高度 可扩展性,可以通过插件来扩展功能. 在 微服务架构 中表现优异,支持多种协议和高并发场景 ...
- .Net Core 管道底层源码实现
在 .NET Core 中,请求处理管道是一个中间件(Middleware)链,用于处理 HTTP 请求并生成响应.管道的底层实现基于 Microsoft.AspNetCore.Http 命名空间中的 ...