在 C# 编程中,ToLookup 方法用于将集合转换成按键分组的查找表,请解释其使用方式。
考察说明
考察对 C# LINQ 中 ToLookup 方法功能与用法的理解。
回答思路
- 【回答框架 1】ToLookup 是 LINQ 的扩展方法,对序列按键分组并生成 ILookup<TKey,TElement>,每个键对应一个元素集合。它类似 GroupBy,但立即执行,结果可重复查询且索引键查找高效。
- 【回答框架 2】用法:对集合调用 ToLookup,传入键选择器,可选元素选择器。例如 persons.ToLookup(p => p.City) 返回按城市分组的查找表,通过 lookup[city] 获取该键下所有元素;键不存在时返回空序列而非异常。
- 【回答框架 3】与 GroupBy 相比,ToLookup 是立即执行并缓存结果,适合多次访问同一分组数据;GroupBy 延迟执行且每次枚举重新计算。选择取决于数据是否多次使用及内存开销。
- 【回答框架 4】内部实现基于哈希表,键的唯一性由默认相等比较器决定,可用自定义 IEqualityComparer 控制分组和查找规则。复杂键可用匿名类型或元组。
- 【关键点 1】ToLookup 返回 ILookup,按键索引快速获取分组集合。
- 【关键点 2】键选择器必需,元素选择器可选。
- 【关键点 3】与 GroupBy 的延迟执行不同,ToLookup 立即执行并缓存。
- 【关键点 4】键不存在时索引返回空序列。
- 【关键点 5】可提供自定义比较器定制键相等性。