Вы можете сначала объединить свои словари в IEnumerable<KeyValuePair<string, List<int>>>
, объединив их с Concat
. Мы делаем это потому, что некоторые ключи могут отсутствовать в обоих словарях, и мы хотим, чтобы они были включены в окончательный объединенный результат.
Затем мы можем сгруппировать ключи с ToLookup
, а затем создать окончательное объединение Dictionary<string, List<int>>
с ToDictionary
, обеспечивающее выравнивание внутренних сгруппированных списков с помощью SelectMany
.
var dictA = new Dictionary<string, List<int>>
{
{ "wow", new List<int>{0,0,0} },
{ "key", new List<int>{1,2,3} }
};
var dictB = new Dictionary<string, List<int>>
{
{ "querty", new List<int>{4,0,4} },
{ "key", new List<int>{4,5,6} }
};
var merged = dictA
.Concat(dictB)
.ToLookup(kvp => kvp.Key, kvp => kvp.Value)
.ToDictionary(group => group.Key, group => group.SelectMany(x => x).ToList());
foreach (var kvp in merged)
{
Console.WriteLine($"{kvp.Key} -> {"{ " + string.Join(", ", kvp.Value) + " }"}");
}
Вывод:
wow -> { 0, 0, 0 }
key -> { 1, 2, 3, 4, 5, 6 }
querty -> { 4, 0, 4 }