サーチ…


前書き

辞書は、キーと値の集合を表します。 MSDN辞書(Tkey、TValue)クラスを参照してください。

辞書をループしてすべてのエントリを表示する

辞書の各ペアは、Dictionaryと同じ型パラメータを持つKeyValuePairインスタンスです。 For Eachを使用して辞書をループすると、各反復で辞書に格納されているKey-Valueペアのいずれかが表示されます。

For Each kvp As KeyValuePair(Of String, String) In currentDictionary
  Console.WriteLine("{0}: {1}", kvp.Key, kvp.Value)
Next

値でいっぱいの辞書を作成する

Dim extensions As New Dictionary(Of String, String) _
  from { { "txt", "notepad" },
  { "bmp", "paint" },
  { "doc", "winword" } }

これにより、辞書が作成され、3つのKeyValuePairですぐに辞書が埋められます。

Addメソッドを使用して、後で新しい値を追加することもできます。

extensions.Add("png", "paint")

キー(最初のパラメータ)は辞書内で一意である必要があります。そうでない場合は例外がスローされます。

辞書値を取得する

'Item'プロパティを使用して、辞書のエントリの値を取得できます。

Dim extensions As New Dictionary(Of String, String) From {
    { "txt", "notepad" },
    { "bmp", "paint" },
    { "doc", "winword" }
}

Dim program As String = extensions.Item("txt") 'will be "notepad"

' alternative syntax as Item is the default property (a.k.a. indexer)
Dim program As String = extensions("txt") 'will be "notepad"

' other alternative syntax using the (rare)
' dictionary member access operator (a.k.a. bang operator)
Dim program As String = extensions!txt 'will be "notepad"

キーが辞書に存在しない場合、KeyNotFoundExceptionがスローされます。

すでに辞書 - データ削減中のキーの確認

ConstainsKeyメソッドは、キーが既にディクショナリに存在するかどうかを知る方法です。

これはデータ削減のために便利です。下のサンプルでは、​​新しい単語に遭遇するたびに、それを辞書のキーとして追加します。そうでなければ、この特定の単語のカウンターをインクリメントします。

 Dim dic As IDictionary(Of String, Integer) = New Dictionary(Of String, Integer)

 Dim words As String() = Split(<big text source>," ", -1, CompareMethod.Binary)

 For Each str As String In words
     If dic.ContainsKey(str) Then
         dic(str) += 1
     Else
         dic.Add(str, 1)
     End If
 Next

XMLの削減例:XML文書のブランチ内のすべての子ノードの名前と発生を取得する

Dim nodes As IDictionary(Of String, Integer) = New Dictionary(Of String, Integer)
Dim xmlsrc = New XmlDocument()
xmlsrc.LoadXml(<any text stream source>)

For Each xn As XmlNode In xmlsrc.FirstChild.ChildNodes 'selects the proper parent
    If nodes.ContainsKey(xn.Name) Then
        nodes(xn.Name) += 1
    Else
        nodes.Add(xn.Name, 1)
    End If
Next


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow