作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试合并两个字典时,我不知道如何将键和值保留在字典中。由于 key 重复,我不断收到 ArgumentException
。当键匹配时,我只想通过 =+ kvp.value;
我有一个字典列表
第一个字典 = kvp = "jump", 2;
2ndDictionary = kvp = "jump", 4;
我喜欢合并它们并得到类似的东西:字典 = kvp = "jump", 6;
我以后可以添加到我的词典列表中
我尝试运行我在 StackOverflow 线程中找到的东西。
foreach (var dict in listOfDict)
{
dict.SelectMany(d => d)
.ToLookup(pair => pair.Key, pair => pair.Value)
.ToDictionary(group => group.Key, group => group.First());
}
但我不断得到。
cannot be inferred from the usage. Try specifying the type argumentsexplicitly.
我想避免将所有键和所有值都放在单独的列表中,然后循环遍历以在新字典中添加键和值。
最佳答案
使用 Linq 对双值字典列表的最简单扩展:
public static class ExtListOfDict {
public static Dictionary<TKey, double> SumValue1<TKey>(this List<Dictionary<TKey, double>> list)
=> list?.SelectMany(i => i).ToLookup(i => i.Key, i => i.Value).ToDictionary(i => i.Key, i => i.Sum());
}
没有 linq:
public static Dictionary<TKey, double> SumValue2<TKey>(this List<Dictionary<TKey, double>> list) {
if(list?.Count > 0) {
var dir = new Dictionary<TKey, double>(list[0]);
for(var i = 1; i < list.Count; i++)
foreach (var kv in list[i])
if (dir.TryGetValue(kv.Key, out double sum))
dir[kv.Key] = sum + kv.Value;
else
dir.Add(kv.Key, kv.Value);
return dir;
} else
return null;
}
关于c# - 如何在不在键上获取 ArgumentException 的情况下合并两个字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74503314/
我是一名优秀的程序员,十分优秀!