如何在C#中合并两个字典与重复

时间:2010-04-19 17:46:10

标签: c#-3.0 dictionary merge

C#中有没有办法合并两个词典?我有两个字典,可能有相同的键,但我正在寻找一种方法来合并它们,所以最后有一个字典,一个键和两个字典的值合并。 我找到了以下代码,但它没有处理重复。

Dictionary Mydictionary<string, string[]> = new Dictionary<string, string[]>();
Mydictonary.Union(secondDictionary).ToDictionary( pair => pair.Key, pair => pair.Value);

3 个答案:

答案 0 :(得分:2)

如果你想要一个LINQ方法,试试这个:

Dictionary<string, string[]> firstDic = new Dictionary<string, string[]>  
{  
    {"apple", new [] {"red"}},  
    {"orange", new [] {"orange"}}  
};

Dictionary<string, string[]> secondDic = new Dictionary<string, string[]>
{
    {"apple", new [] {"green"}},
    {"banana", new [] {"yellow"}}
};

Dictionary<string, string[]> resultDic = firstDic.Union(secondDic)
    .GroupBy(o => o.Key)
    .ToDictionary(o => o.Key, o => o.SelectMany(kvp => kvp.Value).ToArray());

对于样本数据,您将获得一个包含3个KeyValuePairs的词典,而具有“Apple”键的项目将具有一个“红色”和“绿色”的数组。

答案 1 :(得分:1)

也许是这样的:

foreach (var value in secondDictionary)
    if (myDictionary.Contains(value.Key))
        myDictionary[value.Key] = myDictionary[value.Key]
                                     .Concat(value.Value).ToArray();
    else
        myDictionary[value.Key] = value.Value;

答案 2 :(得分:0)

这应该这样做:

Dictionary<string, string[]> dict1 = new Dictionary<string, string[]>();
Dictionary<string, string[]> dict2 = new Dictionary<string, string[]>();

Dictionary<string, List<string>> combined = new Dictionary<string, List<string>>();

foreach (var pair in dict1) combined.Add(pair.Key, new List<string>(pair.Value));
foreach (var pair in dict2)
{
    List<string> list;

    if (!combined.TryGetValue(pair.Key, out list)) combined.Add(pair.Key, list = new List<string>());

    list.AddRange(pair.Value);
}

如果确实想要将结果作为Dictionary<string, string[]>,那么您可以将其添加到最后:

Dictionary<string, string[]> combinedArray = new Dictionary<string, string[]>();

foreach (var pair in combined) combinedArray.Add(pair.Key, pair.Value.ToArray());