我正在尝试合并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);
}
}
}
答案 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);