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 fruits select 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()
方法可以避免因键不存在而抛出异常。