【VB.NET】Dictionary(連想配列)の使い方をわかりやすく説明します。

VB.NET
この記事は約5分で読めます。

【VB.NET】Dictionary<TKey,TValue>(連想配列)の使い方をわかりやすく説明します。

ディクショネリィとは、キー(key)と値(value)のペアを保持しているコレクション(System.Collections.Generic 名前空間)で、通常の配列がインデックス番号により各値(各要素)にアクセスできるのに対して、ディレクトリでは、インデックス番号の代わりにキーを用いて、その各値にアクセスします。

イメージとしは、「キー:山」、「値:川」というハッシュテーブルを用意して置けば、合言葉の「山」→「川」のように値が取り出せます。

似た型にハッシュテーブルがありますが、ディクショネリィは、ハッシュテーブルのジェネリック型にあたります。

ハッシュテーブル(System.Collections 名前空間)
ディクショネリィ(System.Collections.Generic 名前空間)

特徴としては、キーと値に決められた型しか入れられないため、安定していて、アクセス時に型変換が不要なため高速ハッシュテーブルに比べて高速です。

 

内容

ディクショネリィには以下のような特徴があります。

  1. 収める『キー』と『値』はインスタンス時に確定された型で格納される。
  2. 『キー』と『値』は、ハッシュ値で管理される。
  3. ハッシュテーブルより安定していて高速。
  4. 別名「連想配列」ともいう。

宣言方法

宣言の仕方は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

 

コメント

タイトルとURLをコピーしました