Visual Basic .NET Language
Словари
Поиск…
Вступление
Словарь представляет собой набор ключей и значений. См. Класс MSDN Dictionary (Tkey, TValue) .
Прокрутка через словарь и печать всех записей
Каждая пара в словаре является экземпляром KeyValuePair
с теми же параметрами типа, что и Словарь. Когда вы прокручиваете словарь с помощью « For Each
, каждая итерация даст вам одну из пар ключей, хранящихся в словаре.
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" } }
Это создает словарь и сразу заполняет его тремя KeyValuePairs.
Вы также можете добавить новые значения позже, используя метод «Добавить»:
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