VB.NETのDictionaryの使い方のサンプルです。
確認環境 ・Microsoft Visual Studio Community 2019 |
目次
Dictionaryクラスとは
Dim a As New Dictionary(Of String, String) |
上記はDictionaryクラスをインスタンス化して変数aに代入しています。
この変数aは複数のキーと値を持てるようになります。
各キーと各値のデータ型はStringとStringです。((Of String,String)のため)
Dictionaryの変数の図
- 1つの変数で複数の「キー」と「値」を保持できます。
- キーは任意の文字列を使うことができます。
- Java等の他言語でのマップ(Map)にあたります。
- 以下はMicrosoftのDictionaryクラスのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.8 - 似た機能でキーと値を持つHashtableクラスがありますがこちらはMicrosoftのページに「新しい開発では使用しないことをお勧めします。」と書いてあります。
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.hashtable?view=netframework-4.8
要素に初期値をセットする
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String) From {
{"A", "赤"},
{"B", "黄"},
{"C", "青"}
}
For Each b In a
Console.WriteLine(b.Key) 'A B Cと出力される
Console.WriteLine(b.Value) '赤 黄 青と出力される
Next
End Sub
End Module
3~7行目は、Dictionaryクラスをインスタンス化し、かつ初期値をセットしています。
9~12行目は、For Each文で値を取得しています。
キーを指定して値を取得する
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
Console.WriteLine(a("B")) '黄と出力される
End Sub
End Module
9行目は、("B")で要素の位置を指定して値を取得しています。
キーと値をすべて取得する(for文)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
For Each b In a
Console.WriteLine(b.Key) 'A B Cと出力される
Console.WriteLine(b.Value) '赤 黄 青と出力される
Next
For i = 0 To a.Count - 1
Console.WriteLine(a.Keys(i)) 'A B Cと出力される
Console.WriteLine(a.Values(i)) '赤 黄 青と出力される
Next
End Sub
End Module
8行目は、For Each文でキーと値をすべて取得しています。
13行目は、For文でキーと値を取得しています。
キーの集合を取得する (Keysプロパティ)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
For Each b In a.Keys
Console.WriteLine(b) 'A B Cと出力される
Next
End Sub
End Module
8行目は、keysプロパティでキーの集合を取得しています。
値の集合を取得する(Valuesプロパティ)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
For Each b In a.Values
Console.WriteLine(b) '赤 黄 青と出力される
Next
End Sub
End Module
8行目は、valuesプロパティで値の集合を取得しています。
指定のキーがあるか真偽値を返す(ContainsKeyメソッド)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
If (a.ContainsKey("B")) Then
Console.WriteLine("存在します") '存在しますと出力される
End If
If (a.ContainsKey("黄")) Then
Console.WriteLine("あり") '出力されない
End If
End Sub
End Module
8行目は、ContainsKeyメソッドで指定したキーがあるのでTrueです。
12行目は、指定したキーがないのでFalseです。
指定の値があるか真偽値を返す(ContainsValueメソッド)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
If (a.ContainsValue("黄")) Then
Console.WriteLine("存在します") '存在しますと出力される
End If
If (a.ContainsValue("B")) Then
Console.WriteLine("あり") '出力されない
End If
End Sub
End Module
8行目は、ContainsValueメソッドで指定した値があるのでTrueです。
12行目は、指定した値がないのでFalseです。
要素数を取得する (Countプロパティ)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
Console.WriteLine(a.Count) '3と出力される
End Sub
End Module
8行目は、Countプロパティで要素数を取得しています。
キーと値を追加する(Addメソッド/添字)
Module Module1
Sub Main()
Dim color As New Dictionary(Of String, String)
color.Add("a", "赤")
color.Add("b", "黄")
color.Add("c", "青")
color("d") = "白"
For Each c1 In color
Console.WriteLine(c1.Key) 'a b c dと出力される
Console.WriteLine(c1.Value) '赤 黄 青 白と出力される
Next
End Sub
End Module
5~7行目は、Addメソッドでキーと値を追加しています。Addメソッドで既にあるキーを指定した場合エラーになります。
8行目のように添字で存在しないキーを指定しても追加になります。
キーを指定して値を更新する(添字)
Module Module1
Sub Main()
Dim color As New Dictionary(Of String, String)
color.Add("a", "赤")
color.Add("b", "黄")
color.Add("c", "青")
color("b") = "オレンジ"
Console.WriteLine(color("b")) 'オレンジ
color("z") = "白"
For Each c1 In color
Console.WriteLine(c1.Key) 'a b c z
Console.WriteLine(c1.Value) '赤 オレンジ 青 白
Next
End Sub
End Module
9行目は、添字で存在するキーを指定して値を更新しています。
12行目のように添字で存在しないキーを指定すると追加になるので注意が必要です。
要素の位置を指定して要素を削除する (Removeメソッド)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
a.Remove("B")
For Each b In a
Console.WriteLine(b.Key) 'A Cと出力される
Console.WriteLine(b.Value) '赤 青と出力される
Next
End Sub
End Module
8行目は、Removeメソッドでキーを指定して削除しています。
すべての要素を削除する (Clearメソッド)
Module Module1
Sub Main()
Dim a As New Dictionary(Of String, String)
a.Add("A", "赤")
a.Add("B", "黄")
a.Add("C", "青")
a.Clear()
Console.WriteLine(a.Count) '0と出力される
End Sub
End Module
8行目は、Clearメソッドですべての要素を削除しています。
関連の記事