Використання структури даних 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