【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


コメント