Допустим, ваши входные данные выглядят так:
IEnumerable<Tuple<string, int>> firstSequence = ..., secondSequence = ...;
Если строки уникальны в каждой последовательности (т. Е. В каждой последовательности может быть не более одного {"A", XXX})Вы можете join
вот так:
var query = from tuple1 in firstSequence
join tuple2 in secondSequence on tuple1.Item1 equals tuple2.Item1
select Tuple.Create(tuple1.Item1, tuple1.Item2 + tuple2.Item2);
Вы также можете рассмотреть возможность использования group by
, что было бы более уместно, если бы эта уникальность не выполнялась:
var query = from tuple in firstSequence.Concat(secondSequence)
group tuple.Item2 by tuple.Item1 into g
select Tuple.Create(g.Key, g.Sum());
Если ни то, ни другое вам не нужно, уточните ваши требования более точно.
РЕДАКТИРОВАТЬ : После того, как вы пояснили, что это словари, ваше существующее решение в порядке.Вот еще один вариант с join
:
var joined = from kvp1 in dict1
join kvp2 in dict2 on kvp1.Key equals kvp2.Key
select new { kvp1.Key, Value = kvp1.Value + kvp2.Value };
var result = joined.ToDictionary(t => t.Key, t => t.Value);
или в свободном синтаксисе:
var result = dict1.Join(dict2,
kvp => kvp.Key,
kvp => kvp.Key,
(kvp1, kvp2) => new { kvp1.Key, Value = kvp1.Value + kvp2.Value })
.ToDictionary(a => a.Key, a => a.Value);