Обобщенная коллекция 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
соответственно все значения в словаре.