Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритми та структури даних ЗПІ-91-20210115T104612Z-001 / Лекція 8. Хеш таблиці і словники.docx
Скачиваний:
26
Добавлен:
15.01.2021
Размер:
96.48 Кб
Скачать

17

Нелінійні структури даних Лекція 8. Хеш-таблиці (словники)

8.1. Клас SortedList<TKey,TValue> - відсортований список

8.2. Клас Dictionary<TKey, TValue> - словник

8.3. Клас SortedDictionary<TKey, TValue> - відсортований словник

Хеш-таблиця, асоціативний масив, або словник — це масив, доступ до елементів якого здійснюється не за номером, а за деяким ключем. Можна сказати, що це таблиця, що складається з пар "ключ-значення". Хеш-таблиця ефективно реалізує операцію пошуку значення за ключем. При цьому ключ перетворюється в число (хеш-код), яке використовується для швидкого знаходження потрібного значення в хеш-таблиці.

Універсальний клас

Звичайний клас

SortedList<K,T>

SortedList

Dictionary<K,T>

HashTable

SortedDictionary<K,T>

SortedList

8.1. Клас SortedList<TKey,TValue> - відсортований список

Клас SortedList<TKey, TValue> реалізований як масив пар "ключ-значення", відсортованих за ключем. Кожен елемент може бути отриманий як елемент типу KeyValuePair<TKey, TValue>.

Це універсальний еквівалент класу колекції SortedList.

У класі SortedList<TKey, TValue> реалізуються інтерфейси:

IDictionary, IDictionary<TKey, TValue>, ICollection, ICollection<KeyValuePair<TKey, TValue», IEnumerable<KeyValuePair<TKey, TValue».

Об'єкти, використовувані як ключі в класі SortedList<TKey, TValue>, повинні залишатися незмінними в коді програми. Кожен ключ в SortedList<TKey, TValue> має бути унікальним. Ключ не може бути null, а значення може, якщо тип значень в списку, TValue, є посилковим типом.

Об'єкт класу SortedList<TKey, TValue> вимагає реалізації засобу порівняння при виконанні сортування і порівнянь. Засіб порівняння за замовчанням властивості Comparer<T>.Default перевіряє, чи реалізує тип ключа TKey інтерфейс System.IComparable<T>, і використовує цю реалізацію, якщо вона є доступною. Якщо вона недоступна, властивість Comparer<T>.Default перевіряє, чи реалізує тип ключа TKey інтерфейс System.IComparable. Якщо тип ключа TKey не реалізує жоден з цих інтерфейсів, можна задати реалізацію інтерфейсу System.Collections.Generic.IComparer<T> у перевантаженні конструктора, що приймає параметр comparer.

Місткість колекції SortedList<TKey, TValue> - це кількість елементів, яку може вмістити SortedList<TKey, TValue>. При додаванні елементів в колекцію SortedList<TKey, TValue> його місткість потрібним чином автоматично збільшується за рахунок перерозподілу внутрішнього масиву. Місткість може бути зменшена за допомогою виклику методу TrimExcess або за допомогою явного завдання властивості Capacity. При зменшенні місткості перерозподіляється пам'ять і усі елементи копіюються в колекцію SortedList<TKey, TValue>.

Для оператора foreach необхідно вказувати тип елементів колекції. Оскільки елементами класу SortedList<TKey, TValue> є пари "ключ-значення", типом елементу не є тип ключа або тип значення. Тут типом елементу є KeyValuePair<TKey, TValue>.

Примітка

Структура KeyValuePair<TKey, TValue> визначена у просторі імен System.Collections.Generic.

Вона служить для зберігання ключа і його значення і застосовується в усіх класах універсальних колекцій, в яких зберігаються пари "ключ-значення", як, наприклад, в класі SortedList<TKey, TValue>, Dictionary<TKey, TValue>, SortedDictionary<TKey, TValue>. У цій структурі визначаються дві наступні властивості.

public TKey Key { get; };

public TValue Value { get; };

У цих властивостях зберігаються ключ і значення відповідного елементу колекції.

Наприклад:

foreach( KeyValuePair<int, string> kvp in mySortedList )

{

Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);

}

Клас має багато конструкторів.

https://msdn.microsoft.com/ru-ru/library/ms132319(v=vs.110).aspx

В таблиці 1 наведено 2 з них (які використовуються найчастіше).

Таблиця 1. Деякі конструктори класу SortedList<TKey,TValue>

Ім’я

Опис

SortedList<TKey, TValue>()

Ініціалізує новий порожній екземпляр класу SortedList<TKey, TValue> з початковою місткістю за замовчанням, використовуючи інтерфейс IComparer<T> за замовчанням.

SortedList<TKey, TValue>(IComparer<TKey>)

Ініціалізує новий порожній екземпляр класу SortedList<TKey, TValue> з початковою місткістю за замовчанням, що використовує вказаний компаратор IComparer<T>.

Таблиця 2. Властивості класу SortedList<TKey,TValue>

Ім’я

Опис

Capacity

Повертає або задає кількість елементів, яку може містити клас SortedList<TKey, TValue>.

Comparer

Отримує інтерфейс IComparer<T> для відсортованого списку.

Count

Повертає кількість пар "ключ-значення", SortedList, що містяться в словнику<TKey, TValue>.

Item

Отримує або задає значення, пов'язане із заданим ключем.

Keys

Отримує колекцію, що містить ключі в SortedList<TKey, TValue>, відсортовані в порядку TKey.

Values

Отримує колекцію, що містить значення в об'єкті SortedList<TKey, TValue>.

Таблиця 3. Деякі методи класу SortedList<TKey,TValue>

Ім’я

Опис

Add

Додає елемент з вказаним ключем і значенням в SortedList<TKey, TValue>.

Clear

Видаляє усі елементи з колекції SortedList<TKey, TValue>.

ContainsKey

Визначає, чи містить об'єкт SortedList<TKey, TValue> вказаний ключ.

ContainsValue

Визначає, чи містить колекція SortedList<TKey, TValue> вказане значення.

Equals(Object)

Визначає, чи рівний заданий об'єкт поточному об'єкту. (Успадковано від Object.)

Finalize

Дозволяє об'єкту спробувати звільнити ресурси і виконати інші операції очищення, перш ніж об'єкт буде знищеним в процесі збирання сміття. (успадковано від Object.)

GetEnumerator

Повертає нумератор, що здійснює перебір елементів списку SortedList<TKey, TValue>.

GetHashCode

Грає роль хеш-функції для певного типу.(Успадковано від Object.)

GetType

Повертає об'єкт Type для поточного екземпляра. (успадковано від Object.)

IndexOfKey

Здійснює пошук вказаного ключа і повертає індекс (з нуля) для ключа, знайденого в межах усього класу SortedList<TKey, TValue>.

IndexOfValue

Здійснює пошук вказаного значення і повертає індекс (з нуля) першого входження, знайденого в межах усього класу SortedList<TKey, TValue>.

MemberwiseClone

Створює неповну копію поточного об'єкту Object. (Успадковано від Object.)

Remove

Видаляє елемент з вказаним ключем з SortedList<TKey, TValue>.

RemoveAt

Видаляє елемент списку SortedList<TKey, TValue> з вказаним індексом.

ToString

Повертає рядок, що представляє поточний об'єкт. (Успадковано від Object.)

TrimExcess

Встановлює місткість рівною фактичній кількості елементів в SortedList<TKey, TValue>, якщо ця кількість складає менше 90 відсотків поточної місткості.

TryGetValue

Набуває значення, пов'язаного з вказаним ключем.