C#中有没有办法合并两个词典?我有两个字典,可能有相同的键,但我正在寻找一种方法来合并它们,所以最后有一个字典,一个键和两个字典的值合并。 我找到了以下代码,但它没有处理重复。
Dictionary Mydictionary<string, string[]> = new Dictionary<string, string[]>();
Mydictonary.Union(secondDictionary).ToDictionary( pair => pair.Key, pair => pair.Value);
答案 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());