入力データが次のようになっているとします。
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
この一意性が保持されない場合は、より適切なa の使用を検討することもできます。
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);