我必须将两个字典合并为一个字典,删除重复的条目,如果第一个字典中没有,则添加。
Dictionary<int, string> firstDict = new Dictionary<int, string>();
firstDict.Add(1, "X");
firstDict.Add(2, "B");
Dictionary<int, string> secondDict = new Dictionary<int, string>();
secondDict.Add(1, "M");
secondDict.Add(4, "A");
结果应该是这样的:
{4, "A"}
{2, "B"}
{1, "X"}
答案 0 :(得分:4)
您可以使用带有示例LINQ的Concat来实现您想要的效果。这是:
Dictionary<int, string> result =
firstDict.Concat(secondDict.Where(kvp => !firstDict.ContainsKey(kvp.Key)))
.OrderBy(c=>c.Value)
.ToDictionary(c => c.Key, c => c.Value);
结果是:
{4, "A"}
{2, "B"}
{1, "X"}
答案 1 :(得分:1)
试试这个:
foreach (var item in firstDict)
{
secondDict[item.Key] = item.Value;
}
<强>更新强>
如果要保留初始值,请复制secondDict:
Dictionary<int, string> resultDict = new Dictionary<int, string>(secondDict);
foreach (var item in firstDict)
{
resultDict[item.Key] = item.Value;
}
答案 2 :(得分:1)
你会做这样的事情:
var result = firstDict;
foreach(var newitem in secondDict.Where(x => !firstDict.ContainsKey(x.Key)))
result.Add(newItem);
var sortedResult = result.OrderBy(x => x.Value);
请注意,result
仍然是字典但未排序,而sortedResult
已排序但不再是字典,因为字典中的项目顺序未定义。您也不能使用SortedDictionary<TKey, TValue>
,因为它按键排序,而不是值。
答案 3 :(得分:1)
foreach (int key in secondDict.Keys)
{
if (!firstDict.ContainsKey(key))
firstDict.Add(key, secondDict[key]);
}
答案 4 :(得分:0)
我不确定,你想合并它们吗? 如果是这样,你能否:
第一。创建firstDict的副本,其中将设置最终结果。
第二。对于secondDict中的每个键:
1. Check if key exists in firstDict.
1.1. If it does exist(we want to keep the current result): do not do anything(sorry I miss read the result earlier)
1.2. If it doesn't exist then insert it as is(key-value from secondDict into firstDict)
希望它有所帮助!
答案 5 :(得分:0)
我会试试这个:
foreach(var pair in secondDict)
{
if(!(firstDict.ContainsKey(pair.Key)))
{
firstDict.Add(pair.Key, pair.Value);
}
}
这是你想要的吗?我还没有通过编译器对它进行测试,所以试一试。