[UNITY]ValueがCollectionのDictionaryにKeyをAddする方法 | 『くつひも物語』開発日誌 #98

あれ?ValueのCollectionはどうやって初期化するんだっけ

例えば

Dictionary<string, List<int>> dic;

みたいな、ValueがCollectionのDictionaryがあったとして、これ自体を初期化するには

Dictionary<string, List<int>> dic = new Dictionary<string, List<int>>();

と書けば良いですよね。

でも、ValueのList<int>はどうやって初期化するんだっけ? …と、突然頭が真っ白になって迷うことがあるかもしれません。

インデクサ代入を使えばよい

Dictionary<string, List<int>> dic = new Dictionary<string, List<int>>();
dic.Add("a", intList);

Dictionary<string, int> dic = new Dictionary<string, List<int>>();
dic["a"] = intList;

は同じ動きをします。

  1. dic.Add("a", intList);:
    • このメソッドは、キー "a" がまだ辞書内に存在しない場合にのみ使用できます。
    • もしキー "a" が既に辞書内に存在している場合、Add メソッドは ArgumentException を投げます。
  2. dic["a"] = intList;:
    • このインデクサ代入は、キー "a" が辞書内に存在しない場合、新しいキー "a" を作成したうえで、その値を intList に設定します。
    • もしキー "a" が既に辞書内に存在している場合、その値を intList に更新します。
    • この方法では、キーが存在するかどうかに関わらずエラーは発生しません

結論

  • Add メソッドは、キーが辞書内に存在しないことが確実な場合、またはキーの存在を事前にチェックせずに新しいキーを追加したい場合に使用します。
  • インデクサ代入 (dic["a"] = intList;) は、キーが既に存在している可能性がある場合や、キーが存在しない場合に新しく作成し、存在する場合に値を更新したい場合に使用します。