C#Dictionary字典

一、字典核心概念(必背)

Dictionary 是键值对集合(Key-Value)

1. Key 键

  • 唯一、不重复

  • 类似数组下标,但可以是任意数据类型(int、string等)

2. Value 值

  • 可以重复、可以是任意类型

  • 通过 Key 唯一查找对应的 Value

3. 字典定义语法

cs 复制代码
Dictionary<键类型, 值类型> 变量名 = new Dictionary<键类型, 值类型>();

二、基础增删改查

1. 创建字典 & 添加数据

cs 复制代码
Dictionary<int, string> dic = new Dictionary<int, string>();

// Add(键, 值) 添加键值对
dic.Add(0, "何润东");
dic.Add(1, "周传雄-情歌教父");

2. 根据键取值

cs 复制代码
Console.WriteLine(dic[0]); // 通过Key获取对应Value

3. 删除数据

cs 复制代码
dic.Remove(0); // 根据Key删除整组键值对
// dic.Clear(); // 清空所有数据

4. 获取数量

cs 复制代码
Console.WriteLine(dic.Count); // 获取当前键值对总数

5. 判断是否包含某个键

cs 复制代码
Console.WriteLine(dic.ContainsKey(0)); 
// 存在返回true,不存在返回false

三、字典三大遍历方式(最全)

1. 只遍历所有 Key

cs 复制代码
foreach (var item in dic.Keys)
{
    Console.WriteLine(item);        //输出键
    Console.WriteLine(dic[item]);   //通过键取值
}

2. 只遍历所有 Value

cs 复制代码
foreach (var item in dic.Values)
{
    Console.WriteLine(item); 
}

3. 遍历整组键值对(最常用)

cs 复制代码
foreach (var item in dic)
{
    Console.WriteLine(item.Key + ":" + item.Value);
}

四、字典超级易错点(必考坑点)

1. Keys / Values 不能通过下标访问

错误写法

cs 复制代码
// dic.Values[0]  报错!不支持索引访问

正确写法:转数组后才能下标访问

cs 复制代码
dic[键]; // 合法

2. 字典本身可以通过 Key 取值

cs 复制代码
dic[键]; // 合法

3. Key 唯一,不能重复添加

重复 Add 相同 Key → 直接报错


五、高阶用法:字典存储数组(项目常用)

键:班级名值:班级所有学员数组

cs 复制代码
Dictionary<string, string[]> dic1 = new Dictionary<string, string[]>()
{
    {"一班", new string[] { "马化腾", "马云", "马斯克" }},
    {"二班", new string[] { "焦恩俊", "严屹宽", "霍建华", "乔振宇" } }
};

// 根据班级Key取出整个学生数组
string[] arr = dic1["一班"];
Console.WriteLine(string.Join("-", arr));

场景:一对多数据、分类数据、分组数据首选字典存储。


六、字典核心属性总结

  • dic.Keys:获取全部键集合

  • dic.Values:获取全部值集合

  • dic.Count:获取键值对个数

  • dic.ContainsKey(key):判断键是否存在


七、终极背诵总结

  1. 字典是 Key-Value 键值对结构,Key 唯一,Value可重复

  2. 数组下标只能 int,字典 Key 可以是任意类型

  3. 增:Add、删:Remove/Clear、查:Keys/Values/ContainsKey

  4. Keys、Values 不能直接下标访问,需要 ToArray()

  5. 字典可以存储数组、集合,实现分组一对多存储

八、Dictionary字典 / List<T>泛型集合 / ArrayList动态集合 终极区别

三者都是C#常用动态集合,核心差异:存储结构、寻址方式、类型安全、性能、使用场景完全不同

1. 核心结构区别

  • ArrayList:非泛型动态数组,纯顺序存储,无固定类型,全部存 object

  • List<T>:泛型动态数组,顺序存储,固定单一类型,替代ArrayList

  • Dictionary<K,V>:键值对哈希存储,通过唯一Key映射取值,无序分组存储

2. 全方位对比表(背诵版)

对比维度 ArrayList List<T> Dictionary<K,V>
类型安全 不安全,任意object混合存储 安全,固定泛型单一类型 安全,键值类型均固定
装箱拆箱 有,值类型频繁转换,性能低 无,性能极高 无,泛型约束,性能高
取值方式 下标索引取值 index 下标索引取值 index 唯一Key取值 key
元素特点 元素可重复、有序 元素可重复、有序 Key唯一不可重复,Value可重复
扩容机制 动态扩容,效率差 动态扩容,效率优 哈希寻址,无需顺序扩容
适用场景 老旧项目,现已淘汰 普通列表、有序数据、批量遍历、排序筛选 分类分组、一对多数据、按键快速查询

3. 核心优缺点总结

ArrayList 优缺点
  • 优点:动态长度,无需固定数组大小

  • 缺点:类型不安全、频繁装箱拆箱、性能差、项目弃用

List<T> 优缺点(项目首选列表)
  • 优点:类型安全、无装箱拆箱、支持LINQ高阶操作、有序可排序、遍历高效

  • 缺点:查找指定数据需要遍历,查询速度慢于字典

Dictionary 优缺点(项目首选分组)
  • 优点:Key唯一索引,根据键查询速度极快,适合分组、映射、一对多数据

  • 缺点:无序集合、不适合排序、单纯列表存储不如List简洁

4. 终极选型口诀(必背)

  • 单纯存一堆数据、要排序、要遍历 → 用 List<T>

  • 需要分类、分组、按键快速查找、一对多数据 → 用 Dictionary

  • 永远不要用 ArrayList,被List<T>完全替代

5. 最简区分一句话

  • List:靠下标找数据(顺序列表)

  • Dictionary:靠Key找数据(映射分组)

  • ArrayList:List的老旧废版

相关推荐
星子yu1 分钟前
【学习】怎么学好数据结构
数据结构·学习
chh5632 小时前
C++--list
开发语言·数据结构·c++·学习·算法·list
东华万里3 小时前
第36篇: 数据结构核心:栈与队列深度解析
c语言·数据结构·算法·大学生专区
Database_Cool_3 小时前
实时计数器/排行榜首选:阿里云 Tair 高并发数据结构实践
数据结构·数据库·阿里云·云计算
变量未定义~4 小时前
ST表-龙骑士军团【算法赛】
数据结构·算法
Yang_jie_034 小时前
笔记:数据结构(循环队列相关判断条件)
数据结构·笔记
Hesionberger5 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
奋发向前wcx16 小时前
P2590 树的统计 题目解析
数据结构·算法·深度优先
额鹅恶饿呃18 小时前
C语言中的数据结构和变量
c语言·数据结构·算法
万法若空19 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表