在 linq 中加入两个字典
本文关键字:两个 字典 linq | 更新日期: 2023-09-27 18:32:15
假设我有两个不同的字典Dictionary<string,string> Da
和Dictionary<string,int> Db
Db 保存子级别项的计数
var Db = new Dictionary<string,int?>{{"sub1",10},{"sub2",30},{"sub3",70}...};
其中 Da 保存子级别到顶层的映射:
var Da = new Dictionary<string,string>{{"sub1","top1"},{"sub2","top1"},{"sub3","top2"}};
如果我想在顶层聚合数字,
{{"top1",40},{"top2",70}...}
我将如何在 LINQ 中执行此操作?感谢您的帮助!
以下是您可以做到这一点的方法:
var result =
Da
.GroupBy(x => x.Value)
.ToDictionary(
g => g.Key,
g => g.Select(kvp => kvp.Key).Sum(sub => Db[sub]));
基本上,您可以按值(类似于"top1"和"top2")对Da
进行分组。
然后从这样的分组中,创建一个字典。此类字典项的键将是分组的键(例如"top1")。
要计算新字典中每个项目的值,我们首先为每个组选择子,如"sub1"和"sub2",并使用Db
字典获取每个项目的计数,然后计算总和。
如果Db
字典实际上是Dictionary<string,int?>
,则需要使用 GetValueOrDefault
方法处理null
值,如下所示:
var result =
Da
.GroupBy(x => x.Value)
.ToDictionary(
g => g.Key,
g => g.Select(kvp => kvp.Key).Sum(sub => Db[sub].GetValueOrDefault()));