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

C# Dictionary 使用指南

C# Dictionary 使用指南

1. 简介

Dictionary<TKey, TValue> 是 C# 中一个非常常用的泛型集合类,用于存储键值对(Key-Value Pair)。它可以根据键快速查找对应的值,因此在需要快速查找和检索数据的场景下非常高效。

2. 基本概念

  • TKey:键的类型,必须是唯一的。

  • TValue:值的类型,可以是任意类型。

3. 创建字典

3.1 创建空字典

using System.Collections.Generic;Dictionary<string, int> ageDict = new Dictionary<string, int>();

创建一个以字符串为键、整数为值的空字典。

3.2 初始化字典

Dictionary<int, string> fruits = new Dictionary<int, string>
{{ 1, "Apple" },{ 2, "Banana" },{ 3, "Cherry" }
};

使用键值对初始化字典。

4. 添加元素

4.1 使用 Add() 方法

ageDict.Add("Alice", 25);
ageDict.Add("Bob", 30);

如果键已存在,Add() 方法会抛出异常。

4.2 使用索引符 []

ageDict["Alice"] = 26;

如果键已存在,会更新对应的值。

5. 访问元素

5.1 直接访问

string value = fruits[1];  // 返回 "Apple"

如果键不存在,会抛出异常。

5.2 使用 TryGetValue()

if (fruits.TryGetValue(2, out string value))
{Console.WriteLine(value);  // "Banana"
}
else
{Console.WriteLine("Key not found.");
}

TryGetValue() 方法可以安全地访问值,避免因键不存在而抛出异常。

6. 删除元素

ageDict.Remove("Alice");  // 删除键为 "Alice" 的键值对

使用 Remove() 方法根据键删除键值对。

7. 判断键或值是否存在

7.1 判断键是否存在

bool hasKey = ageDict.ContainsKey("Bob");  // 返回 true

使用 ContainsKey() 方法检查键是否存在。

7.2 判断值是否存在

bool hasValue = ageDict.ContainsValue(30);  // 返回 true

使用 ContainsValue() 方法检查值是否存在。

8. 遍历字典

8.1 遍历键值对

foreach (var kvp in fruits)
{Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}

使用 foreach 遍历字典中的所有键值对。

8.2 分别遍历键和值

foreach (int key in fruits.Keys)
{Console.WriteLine($"Key: {key}");
}foreach (string value in fruits.Values)
{Console.WriteLine($"Value: {value}");
}

分别遍历字典中的键和值。

9. 清空字典

fruits.Clear();  // 删除字典中的所有键值对

使用 Clear() 方法清空字典。

10. 高级用法

10.1 自定义比较器

var caseInsensitiveDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

可以指定自定义比较器,例如忽略大小写的字符串比较。

10.2 使用 LINQ 查询

var query = from kvp in fruitsselect new { kvp.Key, kvp.Value };foreach (var item in query)
{Console.WriteLine($"Key: {item.Key}, Value: {item.Value}");
}

使用 LINQ 查询字典。

11. 性能优化

  • 字典针对快速查找进行了优化,但需要注意其容量和加载因子(Load Factor)。

  • 如果字典的键是自定义类型,需要重写 Equals()GetHashCode() 方法。

12. 注意事项

  • 字典的键必须是唯一的,但值可以重复。

  • 字典不保证键值对的顺序。

  • 使用 TryGetValue() 方法可以避免因键不存在而抛出异常。

相关文章:

C# Dictionary 使用指南

C# Dictionary 使用指南 1. 简介 Dictionary<TKey, TValue> 是 C# 中一个非常常用的泛型集合类&#xff0c;用于存储键值对&#xff08;Key-Value Pair&#xff09;。它可以根据键快速查找对应的值&#xff0c;因此在需要快速查找和检索数据的场景下非常高效。 2. 基本…...

基于Spark的电商供应链系统的设计与实现

目录 1.研究背景与意义 2、国内外研究现状 3、相关理论与技术 &#xff08;一&#xff09;分布式计算系统Spark &#xff08;二&#xff09;数据仓库Hive &#xff08;三&#xff09;读取服务器本地磁盘的日志数据Flume &#xff08;四&#xff09;分布式消息队列Kafka …...

MYSQL数据备份与恢复(mysqldump)

MySQL备份之mysqldump 表级别备份还原 格式&#xff1a;mysqldump [OPTIONS] database [tables] 实例&#xff1a;把db_user数据库中的tb_student数据表进行备份 备份&#xff1a;#mysqldump db_user tb_student > /tmp/sqlbak/tb_student.sql -p 还原&#xff1a;#mysql 数…...

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(二)

1.安装mogondb数据库 参考MongoDB安装配置教程&#xff08;详细版&#xff09;_mongodb安装详细步骤-CSDN博客 安装mondbcompass数据库连接工具 参考https://www.mongodb.com/zh-cn/docs/compass/current/connect/ 2.后端服务 1.创建src文件夹 并在src文件夹下创建 index…...

server.servlet.session.timeout: 12h(HTTP 会话的超时时间为 12 小时)

从你提供的配置文件&#xff08;应该是 Spring Boot 的 application.yml 或 application.properties 文件&#xff09;来看&#xff0c;以下部分与会话超时时间相关&#xff1a; server:servlet:session:timeout: 12h # timeout: 30cookie:name: VENDER_SID会话超时时间的…...

MySQL--聚集索引、辅助索引、回表查询和覆盖索引的原理

在MySQL中&#xff0c;索引是提高查询性能的核心工具。理解聚集索引、辅助索引、回表查询和覆盖索引的原理&#xff0c;对于优化数据性能至关重要。以下是对这些概念的详细解释以及优化方法。 一、聚集索引&#xff08;Clustered Index&#xff09; 聚集索引决定了表中数据的…...

使用vscode导出Markdown的PDF无法显示数学公式的问题

我的硬件环境是M2的MacBook air&#xff0c;在vscode中使用了Markdown PDF来导出md文件对应的PDF。但不管导出html还是PDF文件&#xff0c;数学公式都是显示的源代码。 我看了许多教程&#xff0c;给的是这个方法&#xff1a;在md文件对应的html文件中加上以下代码&#xff1a…...

从“记住我”到 Web 认证:Cookie、JWT 和 Session 的故事

文章目录 1. 初识 HTTP&#xff1a;一场没有记忆的对话2. Cookie&#xff1a;网站的“记忆” &#x1f36a;3. Session&#xff1a;服务端的“记忆” &#x1f3af;4. JWT&#xff1a;让用户自己带着“身份证” &#x1f511;5. Cookie vs Session vs JWT 总结 &#x1f4ca;6.…...

Idea编译项目很久之后,提示 Error:java:OutOfMemoryError:insufficient memory

项目挺老的的了&#xff0c;平常项目启动&#xff0c;也要挺久的&#xff0c;但是最起码能启动成功&#xff0c;今天下午的时候&#xff0c;项目启动了十几分&#xff0c;一直在转圈&#xff0c;后面控制台输出了这一行异常 Error:java:OutOfMemoryError:insufficient memory …...

wordpress使用CorePress主题设置项总结

宝塔面板设置 软件商店中安装的软件有&#xff1a;&#xff08;宝塔网站加速3.1&#xff09;&#xff08;Nginx 1.18.0&#xff09;&#xff08;MySql 5.6.50&#xff09;&#xff08;PHP-5.6&#xff09;&#xff08;phpMyAdmin 4.4&#xff09;&#xff08;Python项目管理器 …...

HTTP非流式请求 vs HTTP流式请求

文章目录 HTTP 非流式请求 vs 流式请求一、核心区别 服务端代码示例&#xff08;Node.js/Express&#xff09;非流式请求处理流式请求处理 客户端请求示例非流式请求&#xff08;浏览器fetch&#xff09;流式请求处理&#xff08;浏览器fetch&#xff09; Python客户端示例&…...

LSTM长短期记忆网络-原理分析

1 简介 概念 LSTM&#xff08;Long Short-Term Memory&#xff09;也称为长短期记忆网络&#xff0c;是一种改进的循环神经网络&#xff08;RNN&#xff09;&#xff0c;专门设计用于解决传统RNN的梯度消失问题和长程依赖问题。LSTM通过引入门机制和细胞状态&#xff0c;能够更…...

IP------PPP协议

这只是IP的其中一块内容PPP&#xff0c;IP还有更多内容可以查看IP专栏&#xff0c;前一章内容为网络类型&#xff0c;可通过以下路径查看IP---网络类型-CSDN博客&#xff0c;欢迎指正 3.PPP协议 1.PPP优点 网络类型&#xff1a;p2p PPP---点到点协议 兼容性会更强凡是接口或…...

Java 实现快速排序算法:一条快速通道,分而治之

大家好&#xff0c;今天我们来聊聊快速排序&#xff08;QuickSort&#xff09;算法&#xff0c;这个经典的排序算法被广泛应用于各种需要高效排序的场景。作为一种分治法&#xff08;Divide and Conquer&#xff09;算法&#xff0c;快速排序的效率在平均情况下非常高&#xff…...

JWT+redis实现令牌刷新优化方案

令牌刷新优化方案的详细实现步骤&#xff1a; 1. 令牌服务层改造 1.1 JWT工具类增强 // JwtUtils.java 新增方法 public class JwtUtils {// 生成带动态过期时间的令牌public static String createToken(String subject, String userId, String username, long expirationMi…...

基于 C++ Qt 的 Fluent Design 组件库 QFluentWidgets

简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库&#xff0c;内置超过 150 个开箱即用的 Fluent Designer 组件&#xff0c;支持亮暗主题无缝切换和自定义主题色。 编译示例 以 Qt5 为例&#xff08;Qt6 也支持&#xff09;&#xff0c;将 libQFluentWidgets.d…...

ClkLog里程碑:荣获2024上海开源技术应用创新竞赛三等奖

2024年10月&#xff0c;ClkLog团队参加了由上海计算机软件技术开发中心、上海开源信息技术协会联合承办的2024上海数智融合“智慧工匠”选树、“领军先锋”评选活动——开源技术应用创新竞赛。我们不仅成功晋级决赛&#xff0c;还荣获了三等奖&#xff01;这一成就不仅是对ClkL…...

边缘计算收益低的三大指标

边缘计算收益低的三大指标主要包括以下方面&#xff1a; 1. 资源贡献不足&#xff1a; 边缘计算的收益通常基于所提供的带宽、存储和计算资源来计算。如果设备的网络带宽有限、在线时间短或提供的存储容量较小&#xff0c;可能无法满足平台设定的最低贡献标准&#xff0c;从而导…...

C# 确保程序只有一个实例运行

常规需求 C#程序只能运行一次,不能多开: using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Threading; using System.Runtime.InteropServices; using System.Security.Principal; namespace BallLocation {sta…...

有没有什么免费的AI工具可以帮忙做简单的ppt?

互联网各领域资料分享专区(不定期更新): Sheet 正文 1. 博思AIPPT 特点:专为中文用户设计,支持文本/文件导入生成PPT,内置海量模板和智能排版功能,涵盖商务、教育等多种场景。可一键优化布局、配色,并集成AI绘图功能(文生图/图生图)。适用场景:职场汇报、教育培训、商…...

TCP基本入门-简单认识一下什么是TCP

部分内容来源&#xff1a;小林Coding TCP的特点 1.面向连接 一定是“一对一”才能连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息&#xff0c;也就是一对多是无法做到的 2.可靠的 无论的网络链路中出现了怎样的链路变化&#xff0c;TCP 都可以保证一个…...

ollama提问命令行程序demo(python)

import requests import json# 定义请求的 URL 和数据 url http://localhost:11434/api/generate data {"model": "deepseek-r1:1.5b","prompt": "写一首关于春天的诗" }# 发送 POST 请求并以流式方式接收响应 response requests.p…...

校园快递助手小程序毕业系统设计

系统功能介绍 管理员端 1&#xff09;登录&#xff1a;输入账号密码进行登录 2&#xff09;用户管理&#xff1a;查看编辑添加删除 学生信息 3&#xff09;寄件包裹管理&#xff1a;查看所有的包裹信息&#xff0c;及物流信息 4&#xff09;待取件信息&#xff1a;查看已到达的…...

基于MATLAB红外弱小目标检测MPCM算法复现

摘要&#xff1a;本文详细介绍了一种基于人类视觉系统特性的红外弱小目标检测算法——Multiscale patch-based contrast measure (MPCM)。该算法通过增强目标与背景的对比度&#xff0c;有效检测红外图像中的弱小目标&#xff0c;并在MATLAB环境中进行了复现与实验验证。 关键…...

MySQL 的存储引擎有哪些?它们之间有什么区别?

MySQL 支持多种存储引擎&#xff0c;每种存储引擎都有其独特的特性和适用场景。以下是 MySQL 中常见的存储引擎及其主要区别&#xff1a; 1.常见存储引擎及其特点 (1)InnoDB • 事务支持&#xff1a;支持完整的 ACID 特性&#xff0c;适用于需要事务处理的场景。 • 锁机制&…...

windows下适用msvc编译ffmpeg 适用于ffmpeg-7.1

需要的工具: visual studio 2019 (可以是其他版本&#xff0c;只是本人电脑上装的为2019) msys2 ffmpeg-7.1源码 1. 修改msys2_shell.cmd 在msys2目录修改msys2_shell.cmd 打开后找到行set MSYS2_PATH_TYPEinherit 删除开头的rem 2. 运行msys2 运行x64 Native Tools Command …...

Docker快速使用指南

docker pull ubuntu:22.04 //先拉取一个基础镜像&#xff0c;一般是操作系统创建一个Dockerfile&#xff0c;放在任意目录下&#xff0c;内容如下 # 使用 Ubuntu 22.04 作为基础镜像 FROM ubuntu:22.04# 设置环境变量&#xff0c;避免安装过程中出现交互提示 ENV DEBIAN_FRONT…...

Mysql表字段字符集未设置导致乱码问题

项目场景&#xff1a; 在使用mysql的text类型作为字段类型【未设置编码】&#xff0c;且表结构【设置了编码集】的条件下&#xff0c;查询表这个字段会出现乱码的情况。 问题描述 今日测试小伙伴给题主提出了一个bug&#xff0c;数据库当中的text文本字段在存储json的情况下&…...

Git:多人协作

目录 多人协作一 准备工作 开发者1准备工作 开发者2准备工作 协作开发 将内容合并进master 多人协作二 开发者1进行工作 开发者2进行工作 特殊场景 将内容合并进master 之前所学习的Git操作&#xff0c;是为了多人协作开发做铺垫的&#xff0c;因为在公司中&#xf…...

JSX基础 —— 识别JS表达式

在JSX中可以通过 大括号语法 { } 识别JS中的表达式&#xff0c;比如常见的变量、函数调用、方法调用等等 1、使用引号传递字符串 2、使用JavaScript变量 3、函数调用和方法调用 (函数和方法本质没有区别&#xff0c;这里默认&#xff1a; 函数是自己定义的&#xff0c;方法是…...