我想添加这个答案作为参考。我不明白为什么其他答案从 开始dict1
?dict2
当我们从这样开始时,它会更加方便和容易:
var result = dict2.GroupBy(x => dict1[x.Key] == 0 ? dict1.Min(a=>a.Value) - x.Key :
dict1[x.Key])
.ToDictionary(g => g.Max(x=>x.Key), g => g.Sum(x => x.Value));
或者如果您不关心1-line LINQ solution
,只需声明一些保存最小值的变量dict1
(这种方式当然具有更好的性能):
var min = dict1.Min(a=>a.Value);
var result = dict2.GroupBy(x => {
var d = dict1[x.Key];
return d == 0 ? min - Math.Abs(x.Key) : d;
}).ToDictionary(g => g.Max(x=>x.Key), g => g.Sum(x => x.Value));
注意:上面的代码可以在某些有限的条件下工作,它不会检查key existence
,因为它假设 2 个 dicts 具有相同的键集合(或者至少dict2
可以在 中找到所有键dict1
。如果有一个条目dict2
不匹配任何key in dict1
,我们需要更多的规则来处理这种情况,比如保留原来的条目dict2
...