字典
掌握
Dictionary<TKey, TValue>的键值对结构熟练进行字典的增删改查与遍历
理解字典的适用场景与性能特点
核心讲解
字典是键值对集合,通过键快速查找值,查找速度极快,不受数据量影响。
(1)核心特点
键(Key)必须唯一,不能重复
值(Value)可以重复
泛型指定键和值的类型,类型安全
命名空间:
System.Collections.Generic
(2)常用成员
表格
成员 | 功能 |
|---|---|
| 添加键值对,键重复会报错 |
| 尝试添加,不报错,返回 bool |
| 索引读写,键不存在会报错 / 添加 |
| 安全获取,不存在返回 false |
| 删除键值对 |
| 是否包含指定键 |
| 键值对数量 |
| 所有键的集合 |
| 所有值的集合 |
| 清空 |
(3)遍历方式
遍历键值对:
foreach(KeyValuePair<K,V> item in dict)遍历键:
foreach(var key in dict.Keys)遍历值:
foreach(var value in dict.Values)
操作步骤
创建字典存储学生分数
实现增删改查操作
三种遍历方式演示
运行验证
代码示例
using System.Collections.Generic;
// 创建字典
Dictionary<string, int> scoreDict = new Dictionary<string, int>();
// 添加
scoreDict.Add("张三", 90);
scoreDict.Add("李四", 85);
scoreDict.Add("王五", 95);
scoreDict["赵六"] = 88; // 索引器添加
Console.WriteLine("字典大小:" + scoreDict.Count);
Console.WriteLine("张三的分数:" + scoreDict["张三"]);
// 安全获取
int score;
if (scoreDict.TryGetValue("钱七", out score))
Console.WriteLine("钱七分数:" + score);
else
Console.WriteLine("没有钱七的分数");
// 修改
scoreDict["张三"] = 92;
// 遍历键值对
Console.WriteLine("\n遍历所有:");
foreach (KeyValuePair<string, int> item in scoreDict)
{
Console.WriteLine($"{item.Key} -> {item.Value}");
}
// 删除
scoreDict.Remove("李四");
Console.WriteLine("\n删除后数量:" + scoreDict.Count);
// 统计字符出现次数
string text = "hello world";
Dictionary<char, int> charCount = new Dictionary<char, int>();
foreach (char c in text)
{
if (charCount.ContainsKey(c))
charCount[c]++;
else
charCount[c] = 1;
}
Console.WriteLine("\n字符统计:");
foreach (var item in charCount)
{
Console.WriteLine($"'{item.Key}' 出现 {item.Value} 次");
}
Console.ReadKey();
常见误区
键重复会报错:Add 方法键重复会抛异常,不确定存在用 TryAdd 或者先判断 ContainsKey
用值反查键:字典是按键查值快,值查键要遍历,效率低
遍历的时候删除:和集合一样,遍历中删除会报错
顺序是固定的:字典不保证插入顺序,要有序用
SortedDictionary或者OrderedDictionary
课后练习
创建一个字典存储 3 个员工的姓名和工资
修改其中一个人的工资,删除一个人
遍历所有键值对输出
实现:统计一段英文文本中每个单词出现的次数

