# C零基础入门篇(14.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()` 方法可以避免因键不存在而抛出异常。

---

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值