コレクション

[C#] キーが重複する2つのDictionaryを結合する

2022年1月16日

キーが重複する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が重複した時は、先に存在する要素が有効になります。

関連記事

-コレクション
-