合并具有类似键的字典但在C#中使用不同的值

时间:2014-01-23 14:46:36

标签: c# dictionary

请考虑以下词典:

Dictionary<string, double> dict1 = new Dictionary<string, double>()
Dictionary<string, double> dict2 = new Dictionary<string, double>()

两个词典具有完全相同的键,但值不同。我想通过以下方式合并两个词典:使用与dict1dict2相同的键创建一个新词典,其中值是由{{1}中的匹配值组成的数组每个键都有dict1中的匹配值。

我可以轻松地在循环中做到这一点,但我希望有一种更有效的方法。

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:12)

这假设他们确实拥有相同的密钥:

var merged = dict1.ToDictionary(pair => pair.Key,
                                pair => new[] { pair.Value, dict2[pair.Key] });

或创建Dictionary<string, Tuple<double, double>>

var merged = dict1.ToDictionary(pair => pair.Key,
                                pair => Tuple.Create(pair.Value, dict2[pair.Key]));

如果要在同一方法中使用它,请使用匿名类型使其更清晰:

var merged = dict1.ToDictionary(pair => pair.Key,
                                pair => new { First = pair.Value,
                                              Second = dict2[pair.Key]) });

正如评论中所指出的那样,这些内容仍然在内部循环 - 它们不会比自己编写循环更效率,但它更好阅读。