Dictionary(T) の使い方についてまとめています。C++を使用していた方にとっては、STLのmapやMFCのCMapにあたるものだといえば、分かりやすいでしょう。
ハッシュテーブルや連想配列などとも呼ばれていますが、要はキー(key)と値(value)のペアを保持しているコレクションです。
ここではDictionary(T) の使い方を順に説明していきます。
まずは、Dictionary(T)の初期化します。宣言時に初期値を設定することもできますが、これはコレクション初期化子を利用しています。
' Dictionaryの初期化 Dim map As New Dictionary(Of String, String)() 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構文などを使用して適切に処理する必要があります。