Використання структури даних Dictionary
Словник даних Dictionary являє собою сукупність (колекцію) ключів і значень. Тобто кожен елемент (запис), що додається в словник, складається з значення Value і пов'язаного з ним ключа Key. Витяг значення по його ключу відбувається дуже швидко, оскільки клас Dictionary (Key, Value) реалізований як хеш-таблиця. Кожен ключ в словнику Dictionary (Key, Value) повинен бути унікальним,тобто єдиним у своєму роді, ексклюзивним. При додаванні в колекцію Dictionary чергового елемента так званий компаратор перевіряє на рівність унікальність нового ключа. Ключ не може бути порожнім (Nothing), а значення - може, якщо тип значення Value є посиланням. Можливе створення словника, в якому не відрізняється регістр символів. Використання словника Dictionary може істотно вплинути на ефективність алгоритму, на простоту його розуміння і легкість програмної реалізації.
Завдання, яке вирішується в цьому прикладі, полягає в тому, щоб продемонструвати зручність і технологічність маніпулювання місяцями року для будь-якого аналізу за допомогою словника даних Dictionary. Тут ми поміщаємо в словник даних назви місяців - вони будуть ключем словника, а також кількість днів у цьому місяці, яке буде представляти значення. У такому випадку дуже зручно маніпулювати парами "ключ - значення". Для прикладу виведемо з цього словника на консоль назви місяців, в яких кількість днів дорівнює 30.
Для вирішення завдання запускаємо Visual Studio, створюємо новий проект, в пункті Visual Basic вибираємо шаблон Console Application, вказуємо ім'я (Name): Місяці. У лістингу приведений програмний код даного консольного додатку.
Module Module1
Sub Main()
'Задаємо колір тексту на консолі:
Console.ForegroundColor = ConsoleColor.White
Console.Title = "Використання словника даних"
' Створюємо словник даних з полями типу String та Integer:
Dim Місяці As New Dictionary(Of String, Integer)
' Ініціалізація словника місяців
For i As Integer = 1 To 12
Місяці.Add(MonthName(i), DateTime.DaysInMonth(2016, i))
Next i
Console.WriteLine("Мiсяцi з 30-ма днями: ")
Console.WriteLine()
' Пошук в словнику місяців, які мають 30 днів:
For Each Місяць As KeyValuePair(Of String, Integer) In Місяці
If Місяць.Value = 30 Then _
Console.WriteLine("{0} — {1} днiв", Місяць.Key, Місяць.Value)
Next
Console.ReadKey()
End Sub
End Module
У програмному коді спочатку створюємо об'єкт класу Dictionary, тобто словник даних з полями типу String - для назв місяців і типу Integer - для кількості днів. Ініціалізація словника, тобто присвоєння початкових значень, тут дуже зручна, назва місяця виступає в ролі "індексу", якщо використовувати термінологію масивів. Пошук в словнику місяців, що містять 30 днів, ми організували за допомогою циклу For Each. Тут використана системна структура KeyValuePair (пара "ключ - значення"), призначена саме для маніпуляцій зі словником, хоча її можна використовувати і в інших випадках. Результат роботи програми показаний на рис. 1.
Рис.1. Приклад використання структури даних Dictionary