キーが重複する2つのDictionaryを結合するサンプルです。
Keyが重複した時に例外を発生させるパターンと、
発生させないパターンの2つのサンプルです。
サンプル
例1)Keyが被った場合に例外となるパターン
// Dictionary1を生成する
var dic1 = new Dictionary<string, string>() {
{"東京", "東京都"},
{"大阪", "大阪府"},
{"名古屋", "愛知県"}
};
// Dictionary2を生成する
var dic2 = new Dictionary<string, string>(){
{"東京", "東京都"},
{"仙台", "宮城県"},
{"福岡", "福岡県"}
};
// Dictionary1とDictionary2を結合する
var result = dic1.Concat(dic2)
.ToDictionary(x => x.Key, x => x.Value);
foreach (var v in result)
{
Console.WriteLine(v.Key + v.Value);
}
結果(例外発生)
System.ArgumentException:
'An item with the same key has already been added. Key: 東京'
Key'東京'が被っているため、例外が発生します。
例2)Keyが被った場合に例外とならないパターン
// Dictionary1を生成する
var dic1 = new Dictionary<string, string>() {
{"東京", "東京都"},
{"大阪", "大阪府"},
{"名古屋", "愛知県"}
};
// Dictionary2を生成する
var dic2 = new Dictionary<string, string>(){
{"東京", "東京都"},
{"仙台", "宮城県"},
{"福岡", "福岡県"}
};
// Dictionary1とDictionary2を結合する
var result = dic1.Concat(dic2)
.GroupBy(x => x.Key)
.ToDictionary(x => x.Key, x => x.FirstOrDefault().Value);
// コンソールに表示する
foreach (var v in table3)
{
Console.WriteLine(v.Key + v.Value);
}
結果
東京東京都
大阪大阪府
名古屋愛知県
仙台宮城県
福岡福岡県
Key'東京'が被っていますが例外は発生しません。
備考
- パターン2の場合Keyが重複した時は、先に存在する要素が有効になります。