Обобщенная коллекция Dictionary(Of T, V) является еще одним из наиболее используемых классов коллекций.
Класс Dictionary(Of T, V) представляет словарь, который хранит объекты в виде пары ключ-значение.
Каждый такой объект является объектом класса KeyValuePair(Of TKey, TValue). С помощью свойств Key и
Value, которые есть у данного класса, мы можем получить ключ и значение элемента в словаре.
Рассмотрим на примере использование словарей:
Dim states As New Dictionary(Of Integer, String)(5)
states.Add(1, "Россия")
states.Add(3, "Великобритания")
states.Add(2, "США")
states.Add(4, "Франция")
states.Add(5, "Китай")
For Each item As KeyValuePair(Of Integer, String) In states
Console.WriteLine(item.Key.ToString() & " - " & item.Value)
Next
'получение элемента по ключу
Dim state As String = states(4)
'удаление по ключу
states.Remove(2)
Класс словарей также, как и другие коллекции, предоставляет методы Add и Remove для добавления и удаления элементов. Только в случае словарей в метод Add передаются два параметра: ключ и значение. А метод Remove удаляет не по индексу, а по ключу.
Поскольку в примере выше ключами является объекты типа Integer, а значениями - объекты типа String, то словарь
в нашем случае будет хранить объекты KeyValuePair(Of Integer, String). В цикле For Each также, как и у других коллекций,
можно перебрать все элементы и извлечь их них ключ и значение.
Кроме того, мы можем получить отдельно коллекции ключей и значений словаря:
Module Module1
Sub Main()
Dim people As New Dictionary(Of Char, Person)()
people.Add("b"c, New Person() With {.Name = "Bill"})
people.Add("t"c, New Person() With {.Name = "Tom"})
people.Add("j"c, New Person() With {.Name = "John"})
For Each item As KeyValuePair(Of Char, Person) In people
'item.Value представляет класс Person
Console.WriteLine(item.Key.ToString() & " - " & item.Value.Name)
Next
'перебор ключей
For Each c As Char In people.Keys
Console.WriteLine(c)
Next
'перебор по значениям
For Each p As Person In people.Values
Console.WriteLine(p.Name)
Next
Console.ReadLine()
End Sub
Class Person
Public Property Name() As String
End Class
End Module
В данном случае в качестве ключей выступают объекты типа Char, а значениями - объекты Person. С помощью свойства
Keys мы можем получить ключи словаря, а с помощью свойства Values соответственно все значения в словаре.