将元组字典中的值汇总到c#中的新字典

时间:2018-02-08 21:19:12

标签: c# dictionary

我的字典看起来像这样:

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 值?

1 个答案:

答案 0 :(得分:3)

ToDictionary(keySelector)项目投放到Dictionary<TKey, T>。在您的情况下,TKeyValuePair<(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));