5

我必须将两个字典合并到一个字典中,删除重复条目,如果第一个字典中不存在则添加。

 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"}
4

6 回答 6

6

您可以使用 Concat 和示例 LINQ 来实现您想要的。这里是:

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"}
于 2013-08-08T10:30:44.317 回答
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;
}
于 2013-08-08T10:27:44.420 回答
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>任何一种,因为它是按键排序的,而不是按值排序的。

于 2013-08-08T10:27:52.817 回答
1
foreach (int key in secondDict.Keys)
{
    if (!firstDict.ContainsKey(key))
    firstDict.Add(key, secondDict[key]);
}
于 2013-08-08T10:29:25.737 回答
1

我会试试这个:

foreach(var pair in secondDict)
{
   if(!(firstDict.ContainsKey(pair.Key)))
   {
      firstDict.Add(pair.Key, pair.Value);
   }
}

这是你想要的吗?我还没有通过编译器测试它,所以试一试。

于 2013-08-08T10:35:31.047 回答
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)

希望它有帮助!

于 2013-08-08T10:27:55.073 回答