如何将2个词典合并到由{Key = Value(Dict1),Value = Value(Dict2)}组成的第三个词典中

时间:2019-10-16 06:53:44

标签: c# dictionary merge

我正在尝试合并2个词典。

第一个由ID和标题组成,例如:{2,Error}。

第二个由ID和ID出现的频率组成:{2,3}。

我想创建一个像这样的字典:{Error,3}。

这可能吗?

到目前为止,我的代码仅在没有重复的情况下才有效...我只想将重复ID的频率编号添加到先前保存的相同ID的频率中。所以例如如果由于某种原因在dict2中存在{2,3}和{2,5},则dict3中的结果应该为{Error,8}。

foreach (var item in dict2)
{
    foreach(var entry in dict1)
    {
        if (item.Key.Equals(entry.Key))
        {
            dict3.Add(entry.Value.ToString(), (int)item.Value);                       
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用LINQ:

var combinedDictQry =
    from entry1 in dictionary1
    from entry2 in dictionary2
    where entry1.Key == entry2.Key
    select new { Key = entry1.Value, Value = entry2.Value };
var combinedDict = combinedDictQry.ToDictonary(entry => entry.Key, entry => entry.Value);

这对于较小的词典(即出于大多数实际目的)非常有用。如果需要处理大量数据,则可能会遇到性能问题,必须使用TryGetValue访问第二个字典的值才能利用字典的更好访问性能。

如果您期望dictionary1中的重复值,则.ToDictionary将不起作用,因为字典中不允许重复的键。但是,您可以创建查找。重复的键将被合并,并且值可以枚举:

var combinedLookup = combinedDictQry.ToLookup(entry => entry.Key, entry => entry.Value);