我的字典看起来像这样:
Dictionary<(K1, K2), int> dict1;
我想从中创建一个新的字典,其中所有仅与K1
匹配的 int 值被汇总并放入一个新的字典中,如:
Dictionary<K1, int> dict2;
我已经看过使用ToDictionary
这样的事情:
var dict2 = new Dictionary<K1, int>();
var values = dict1.ToDictionary(c => c.Key.Item1);
foreach (var v in values)
{
dict2[v.Key] += v.Value;
}
这不会起作用,因为ToDictionary
会返回类似这样的内容
Dictionary<K1, KeyValuePair<(K1, K2), int>>
如何从dict1
检索数据结构,该数据结构允许我汇总在元组键中共享K1
的所有值,然后使用{dict2
将其存储在新字典中K1
{1}}作为键映射到汇总的 int 值?
答案 0 :(得分:3)
ToDictionary(keySelector)
项目投放到Dictionary<TKey, T>
。在您的情况下,T
为KeyValuePair<(K1,K2), int>
,因此无法按预期运行。您需要改为使用ToDictionary(keySelector, valueSelector)
。
但是,由于key
不是唯一的,因此您会遇到问题,因此您需要使用GroupBy
来避免这种情况:
var dict2 = dict1
.GroupBy(x => x.Key.Item1)
.ToDictionary(x => x.Key, g => g.Sum(kvp => kvp.Value));