VB.NET Dictionary(T) の使い方(まとめ)

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

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

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

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

        ' Dictionaryの初期化
        Dim map As New Dictionary(Of StringString)() From { _
         {"apple""リンゴ"}, _
         {"banana""バナナ"}, _
         {"chocolate""チョコレート"} _
        }

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

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

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

        ' TryGetValueを使用して値の取得する
        Dim value As String
        Dim b As Boolean = map.TryGetValue("banana", value)
         
        ' ()で値を取得する
        If map.ContainsKey("banana"Then
            value = map("banana")
        End If

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

        ' キーを列挙
        For Each k In map.Keys
            Console.WriteLine(k)
        Next
         
        ' 値を列挙
        For Each v In map.Values
            Console.WriteLine(v)
        Next
         
        ' キーと値のペアを列挙
        For Each p In map
            Console.WriteLine(String.Format("{0}:{1}", p.Key, p.Value))
        Next

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

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