概述:
介绍字典是 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
针对查找性能进行优化:如果您知道数据的大致大小,请使用该容量初始化字典。
避免频繁调整大小:不断添加超出容量的元素会导致字典调整大小,从而影响性能。