【C#】-Dictionary的详细用法

news/发布时间2024/5/20 2:07:00

概述:

介绍字典是 C# 中使用最广泛的数据结构之一,提供快速查找、键值对存储等。本指南探讨了该类,解释了从基本用法到高级方案的复杂性。DictionaryTKey, TValue词典基础什么是字典?字典是键值对的集合,其中每个键必须是唯一的。当您需要通过唯一键查找值时,通常使用它。

介绍

字典是 C# 中使用最广泛的数据结构之一,提供快速查找、键值对存储等。本指南探讨了该类,解释了从基本用法到高级方案的复杂性。Dictionary<TKey, TValue>

词典基础

什么是字典?

字典是键值对的集合,其中每个键必须是唯一的。当您需要通过唯一键查找值时,通常使用它。

创建和初始化:

点击查看代码
// Empty dictionary  
var capitals = new Dictionary<string, string>();  // Initialized dictionary  
var fruits = new Dictionary<int, string>  
{  { 1, "Apple" },  { 2, "Banana" },  { 3, "Cherry" }  
};

基本操作

添加条目:

点击查看代码
capitals.Add("USA", "Washington, D.C.");  
capitals.Add("UK", "London");

检索值:

点击查看代码
string ukCapital = capitals["UK"];  // Returns "London"

检查密钥:

点击查看代码
bool hasUK = capitals.ContainsKey("UK");  // Returns true

删除条目:

点击查看代码
capitals.Remove("UK");

高级概念

遍历字典:
您可以循环访问键和/或值(键值对):

点击查看代码
foreach (var key in capitals.Keys)  Console.WriteLine(key);  foreach (var value in capitals.Values)  Console.WriteLine(value);  foreach (var kvp in capitals)  Console.WriteLine($"Country: {kvp.Key}, Capital: {kvp.Value}");foreach (DictionaryEntry entry in dictionary)
{// 访问键和值object key = entry.Key;object value = entry.Value;// 处理键值对...
}Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();var keys = new List<TKey>(dictionary.Keys);
for (int i = 0; i < keys.Count; i++)
{var key = keys[i];var value = dictionary[key];// 处理键值对
}

使用以下方法进行值查找:TryGetValue
当键不存在时,不要捕获异常,而是使用:TryGetValue

点击查看代码
if (capitals.TryGetValue("UK", out string capital))  Console.WriteLine(capital);  
else  Console.WriteLine("Key not found.");

字典容量和性能:

该类针对快速查找进行了优化。但是,了解其容量和有助于优化性能,尤其是在处理大型词典时。DictionaryLoad Factor

容量:字典在不调整大意的情况下可以容纳的条目总数。

计数:字典中的当前条目数。

荷载系数: .CountCapacity

比较器:

默认情况下,字典使用键的默认比较器。但是,您可以指定自定义比较器:

点击查看代码
var caseInsensitiveDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

并发词典:

在多线程方案中,可能需要线程安全操作。从命名空间使用。ConcurrentDictionarySystem.Collections.Concurrent

与 LINQ 一起使用:Dictionary
字典与 LINQ 无缝协作,允许强大的查询:

点击查看代码
var filtered = capitals.Where(kvp => kvp.Value.StartsWith("W"))  .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

高级词典类型

SortedDictionary<TKey, TValue>:
按键的升序存储键值对。当您需要特定顺序的数据时很有用。

ReadOnlyDictionary<TKey, TValue>:
提供字典的只读视图。保护基础词典不被修改。

最佳实践:
使用正确类型的键:键在字典中的生存期内应该是不可变的。

注意:字典不允许使用键,但允许使用值。nullnullnull

针对查找性能进行优化:如果您知道数据的大致大小,请使用该容量初始化字典。

避免频繁调整大小:不断添加超出容量的元素会导致字典调整大小,从而影响性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/30560561.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

OpenVX技术图例(一)

OpenVX技术图例(一) 参考文献链接 https://registry.khronos.org/OpenVX/specs/1.1/html/index.html人工智能芯片与自动驾驶

C++ 数据输入cin (解决CLoin输入中文程序出错)

数据输入cin语法:cin >> 变量 解决 CLoin 使用cin输入中文程序无法正常运行按住Ctrl+alt+shift+/键 弹出对话框选择注册表取消勾选run.process.with.pty

C++数据类型

整型C++除了int类型 还有其他类型的数据,所占空间也不一样 sizeof() 函数——得到数据所占的字节#include "iostream" using namespace std;int main() {system("chcp 65001");long long num = 20;cout << "long long 类型占" << s…

C++ cout打印输出 (解决输出乱码)

cout打印输出输出单份内容// 输出单份内容cout << "Hello World!" << endl;cout << 10 << endl;输出多份内容// 输出多份内容cout << "I am " << 18 << "years old" << endl;可以自由组合多个&…

三角函数之和差化积公式

知识点1:三角函数奇偶性: \(\sin(-\theta)=-\sin\theta, \quad \cos(-\theta)=\cos\theta\)如上图: 单位半圆的半径为1,\(\triangle AOB\)为等腰三角形。 点\(C\)为线段\(AB\)之中点,连接\(CO\)。 根据等腰三角形的性质,\(OC\) 是 \(△AOB\) 的角平分线和垂直平分线。 \(…

珂朵莉树/颜色段均摊

名称简介 珂朵莉树(Chtholly Tree),又名老司机树 ODT(Old Driver Tree)。起源自 CF896C。 注意,这种想法的本质是基于数据随机的「颜色段均摊」,而不是一种数据结构,下文介绍的操作是这种想法的具体实现方法。 前置知识 会用 STL 的 set 就行。 核心思想 把值相同的区间…