あれ?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;
は同じ動きをします。
dic.Add("a", intList);
:- このメソッドは、キー "a" がまだ辞書内に存在しない場合にのみ使用できます。
- もしキー "a" が既に辞書内に存在している場合、
Add
メソッドはArgumentException
を投げます。
dic["a"] = intList;
:- このインデクサ代入は、キー "a" が辞書内に存在しない場合、新しいキー "a" を作成したうえで、その値を
intList
に設定します。 - もしキー "a" が既に辞書内に存在している場合、その値を
intList
に更新します。 - この方法では、キーが存在するかどうかに関わらずエラーは発生しません。
- このインデクサ代入は、キー "a" が辞書内に存在しない場合、新しいキー "a" を作成したうえで、その値を
結論
Add
メソッドは、キーが辞書内に存在しないことが確実な場合、またはキーの存在を事前にチェックせずに新しいキーを追加したい場合に使用します。- インデクサ代入 (
dic["a"] = intList;
) は、キーが既に存在している可能性がある場合や、キーが存在しない場合に新しく作成し、存在する場合に値を更新したい場合に使用します。