C# Dictionary<T> の使い方(まとめ)

Dictionary<T> の使い方についてまとめています。C++を使用していた方にとっては、STLのmapやMFCのCMapにあたるものだといえば、分かりやすいでしょう。

ハッシュテーブルや連想配列などとも呼ばれていますが、要はキー(key)と値(value)のペアを保持しているコレクションです。

ここではDictionary<T> の使い方を順に説明していきます。

まずは、Dictionary<T>の初期化します。宣言時に初期値を設定することもできますが、これはコレクション初期化子を利用しています。

            // Dictionaryの初期化
            Dictionary<stringstring> map = new Dictionary<stringstring>()
            {
                { "apple""リンゴ" },
                { "banana""バナナ" },
                { "chocolate""チョコレート" },
            };

次に値の追加と削除についてですが、書き方は2通りあり、Addメソッドを使用した場合はキーが重複した際に例外が発生し、[]を使用した場合は重複した際に値が上書きされます。

            // Addで追加するとキーが重複した場合に例外が発生
            map.Add("dog""犬");
            
            // []で追加するとキーが重複した場合に値が上書きされる
            map["pig"] = "豚";
            
            // 削除
            map.Remove("apple");

値を取り出す場合も、2通りの方法がありますが、TryGetValueメソッドよりも、ContainsKeyメソッドを使用して存在するかのチェックを行ったあと[]を使用して値を取得する方が一般的です。

            // TryGetValueを使用して値の取得する
            string value;
            bool b = map.TryGetValue("banana"out value);
             
            // []で値を取得する
            if (map.ContainsKey("banana"))
            {
                value = map["banana"];
            }

foreachでキーや値、その両方を列挙することも可能です。

            // キーを列挙
            foreach (var k in map.Keys)
            {
                Console.WriteLine(k);
            }
             
            // 値を列挙
            foreach (var v in map.Values)
            {
                Console.WriteLine(v);
            }
             
            // キーと値のペアを列挙
            foreach (var p in map)
            {
                Console.WriteLine(string.Format("{0}:{1}", p.Key, p.Value));
            }

Dictionary<T>はスレッドセーフでは無いため、マルチスレッドで動作する場合はlock構文などを使用して適切に処理する必要があります。

使用環境: Visual Studio 2010 .NET Framework 3.0 以降

C# メニューリスト