【VB.NET】Dictionary<TKey,TValue>(連想配列)の使い方をわかりやすく説明します。
ディクショネリィとは、キー(key)と値(value)のペアを保持しているコレクション(System.Collections.Generic 名前空間)で、通常の配列がインデックス番号により各値(各要素)にアクセスできるのに対して、ディレクトリでは、インデックス番号の代わりにキーを用いて、その各値にアクセスします。
イメージとしは、「キー:山」、「値:川」というハッシュテーブルを用意して置けば、合言葉の「山」→「川」のように値が取り出せます。
似た型にハッシュテーブルがありますが、ディクショネリィは、ハッシュテーブルのジェネリック型にあたります。
ハッシュテーブル(System.Collections 名前空間)
ディクショネリィ(System.Collections.Generic 名前空間)
特徴としては、キーと値に決められた型しか入れられないため、安定していて、アクセス時に型変換が不要なため高速ハッシュテーブルに比べて高速です。
内容
ディクショネリィには以下のような特徴があります。
- 収める『キー』と『値』はインスタンス時に確定された型で格納される。
- 『キー』と『値』は、ハッシュ値で管理される。
- ハッシュテーブルより安定していて高速。
- 別名「連想配列」ともいう。
宣言方法
宣言の仕方は2通りあります。
宣言の後に項目設定する方法
宣言 Dim 連想配列名 As Dictionary(Of キーの型, 値の型) = New Dictionary(Of キーの型, 値の型)
宣言と同時に項目設定する方法
' 宣言 + 項目設定 Dim 変数名 As Dictionary(Of キーの型, 値の型) = New Dictionary(Of キーの型, 値の型) From { {キー1, 値1}, {キー2, 値2}, {キー3, 値3} }
項目の追加
項目の追加は2通りです。好きな方でOKです。
' 項目設定やり方1 変数名.Add(キー, 値)
' 項目設定やり方2 変数名(キー) = 値
値の変更
値を変更する場合は、下記の通りです。
変数名(キー) = 値
値を変更するつもりでAddするとエラーが発生します。
変数名.Add(既存のキー, 値)
System.ArgumentException: 項目は既に追加されています
項目の削除
項目の削除する場合は、項目を削除したいときは、Removeメソッドを使います。
変数名.Remove(キー)
キー、値が設定済みか確認する
既に『キー』が設定済みかチェックする
変数名.ContainsKey(キー)
既に『値』が設定済みかチェックする
変数名.ContainsValue(値)
Boolean型で「True」or「False」が返ってきます
キー、値の一覧を列挙する
For Each 文で簡単に取得できます。
' キー項目の列挙 For Each key As 型 In 変数名.Keys Console.WriteLine(key) Next
' 値項目の列挙 For Each val As 型 In 変数名.Values Console.WriteLine(val) Next
' エントリ(キーと値)の列挙 For Each de As DictionaryEntry In 変数名 Console.WriteLine("{0} : {1}", de.Key, de.Value) Next
サンプルコード
全体のサンプルコード
Module Module1 Sub Main() ' 宣言 + 項目設定 Dim dc As Dictionary(Of String, String) = New Dictionary(Of String, String) From { {"名前1", "みかん"}, {"名前2", "りんご"} } ' 項目追加 dc("名前3") = "いちご" ' 値を変更 dc("名前2") = "APPLE" ' キーで値にアクセス出来る Console.WriteLine(dc("名前3")) 'いちご ' キーが存在するか確認 Console.WriteLine(dc.ContainsKey("名前1")) 'True ' 値が存在するか確認 Console.WriteLine(dc.ContainsValue("みかん")) 'True ' 存在しないキーは エラーとなる 'Console.WriteLine(dc("名前4")) ' System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しません でした。 ' キー項目の列挙 For Each key As String In dc.Keys Console.WriteLine(key) '名前1 名前2 名前3 Next ' 値項目の列挙 For Each val As String In dc.Values Console.WriteLine(val) 'みかん APPLE いちご Next ' キーと値の削除 dc.Remove("名前2") ' キー と 値の列挙 For Each d As KeyValuePair(Of String, String) In dc Console.WriteLine("キー:{0} 値: {1}", d.Key, d.Value) 'キー: 名前1 値: みかん 'キー: 名前3 値: いちご Next End Sub End Module
コメント