当我试图合并两个字典时,我不知道如何保留字典上的键和值。由于键重复,我一直得到ArgumentException
。当键匹配时,我只想通过=+ kvp.value;
添加值
我有一个字典列表
第一个字典= kvp = "jump", 2;
第二字典= 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());
}
但我一直在想。
无法从用法推断出。请尝试显式指定类型参数。
我希望避免在单独的列表中获取所有键和所有值,以便在以后循环访问时在新字典中添加键和值。
4条答案
按热度按时间zpgglvta1#
使用Linq对双精度值字典列表的最简单扩展:
无链接:
kxxlusnw2#
如果您喜欢LINQ方法,我会选择类似以下的方法:
但是,如果这太难阅读(我并不总是喜欢在显式代码块上使用过多的LINQ),您可以使用
for-loop
方法:希望这对你有帮助。如果需要进一步的帮助和解释,请告诉我。
ncecgwcz3#
下面是一个基于
CollectionsMarshal.GetValueRefOrAddDefault
API(.NET 6)和INumber<TSelf>
接口(.NET 7)的解决方案:每个字典中每个
KeyValuePair<TKey, TValue>
的键只散列一次。vptzau2j4#
如果您因为重复的键而得到异常,那么听起来就像您有重复的键!
在尝试合并两个字典之前,您是否检查过它们?简单地调用
=+ kvp.value
,而不检查第一个字典是否已经有该名称的键,这很可能是您的问题。您需要检查具有该键的现有条目,如果找到,则采取适合您的场景的任何操作(即忽略、覆盖、要求用户决定等)