【C#】-Dictionary的详细用法
概述:
介绍字典是 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
针对查找性能进行优化:如果您知道数据的大致大小,请使用该容量初始化字典。
避免频繁调整大小:不断添加超出容量的元素会导致字典调整大小,从而影响性能。
📢博客主页:https://www.cnblogs.com/VisionCodeBlog
📢本文由 VisionCode原创,首发于 博客园,转载请注明原文链接:https://www.cnblogs.com/VisionCodeBlog/p/18178836🙉
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
📢技术进步源于分享与交流✨
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)