Хеш-таблиця C# із прикладами
⚡ Розумний підсумок
Хеш-таблиця в C# — це колекція з простору імен System.Collections, яка зберігає дані у вигляді пар ключ-значення, де кожен унікальний ключ відповідає значенню, а ключ забезпечує швидкий пошук цього збереженого значення.

Що таке Hashtable у C#?
Хеш-таблиця — це спеціальна колекція, яка використовується для зберігання елементів типу "ключ-значення". Тож замість того, щоб зберігати лише одне значення, наприклад стек, список масивів і чергу, хеш-таблиця зберігає 2 значення. Ці 2 значення утворюють елемент хеш-таблиці.
Нижче наведено кілька прикладів того, як можуть виглядати значення хеш-таблиці.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Вище ми маємо 3 пари ключ-значення. Ключі кожного елемента 001, 002 і 003 відповідно. Значення кожної пари ключ-значення є «.Net“, “C#” та “ASP.Net” відповідно.
Давайте детальніше розглянемо операції, доступні для колекції Hashtable.
Оголошення хеш-таблиці
Оголошення хеш-таблиці показано нижче. Hashtable створюється за допомогою типу даних Hashtable. Ключове слово “new” використовується для створення об’єкта хеш-таблиці. Потім об’єкт присвоюється змінній ht.
Hashtable ht = new Hashtable()
Додавання елементів до хеш-таблиці
Метод Add використовується для додавання елемента до чергу. Загальний синтаксис оператора наведено нижче
HashTable.add("key","value")
Приклад 1:
Пам’ятайте, що кожен елемент хеш-таблиці складається з 2 значень, одне є ключем, а інше – значенням.
Тепер давайте подивимося, як це працює на рівні коду. Весь наведений нижче код буде записано в нашу консольну програму.
Код буде записаний у наш файл Program.cs. У наведеній нижче програмі ми напишемо код, щоб побачити, як ми можемо використовувати вищезгадані методи.
Наразі в нашому прикладі ми просто розглянемо, як ми можемо створити хеш-таблицю, додати елементи до хеш-таблиці та відобразити їх відповідно.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code Пояснення:
- Спочатку ми оголошуємо змінну hashtable за допомогою типу даних Hashtable за допомогою ключового слова «New». Ім'я визначеної змінної - "ht".
- Потім ми додаємо елементи до хеш-таблиці за допомогою методу Add. Пам’ятайте, що нам потрібно додати як ключ, так і елемент значення, додаючи щось до хеш-таблиці.
- Не існує прямого способу відображення елементів хеш-таблиці.
- Щоб відобразити хеш-таблицю, нам спочатку потрібно отримати список ключів (001, 002 і 003) з хеш-таблиці.
- Це робиться через інтерфейс ICollection. Це спеціальний тип даних, який можна використовувати для зберігання ключів колекцій хеш-таблиць. Потім ми призначаємо ключі колекції хеш-таблиць змінній 'keys'.
- Далі для кожного значення ключа ми отримуємо відповідне значення в хеш-таблиці за допомогою оператора ht[k].
Якщо наведений вище код введено належним чином і програма запущена, буде показано наступний результат.
вихід:
Давайте розглянемо ще деякі методи, доступні для хеш-таблиць.
Містить ключ
Цей метод використовується для перевірки наявності ключа в хеш-таблиці. Нижче наведено загальний синтаксис цього оператора. Оператор поверне значення true, якщо ключ існує, інакше він поверне значення false.
Hashtable.Containskey(key)
Містить значення
Цей метод використовується для перевірки наявності значення в хеш-таблиці. Нижче наведено загальний синтаксис цього оператора. Оператор поверне значення true, якщо значення існує, інакше поверне значення false.
Hashtable.ContainsValue(value)
Приклад 2:
Давайте змінимо код у нашому Консольний додаток щоб продемонструвати, як ми можемо використовувати метод «Containskey» і «ContainsValue».
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code Пояснення:
- Спочатку ми використовуємо метод ContainsKey, щоб перевірити, чи присутній ключ у хеш-таблиці. Цей метод поверне значення true, якщо ключ присутній у хеш-таблиці. Цей метод має повертати true, оскільки ключ існує в хеш-таблиці.
- Потім ми використовуємо метод ContainsValue, щоб перевірити, чи присутнє значення в хеш-таблиці. Цей метод поверне «true», оскільки значення дійсно існує в хеш-таблиці.
Якщо наведений вище код введено належним чином і програма запущена, буде показано наступний результат.
вихід:
З результату ви можете чітко побачити, що і ключ, і значення, які шукаються, присутні в хеш-таблиці.
Як перебрати хеш-таблицю в C#
У наведених вище прикладах значення зчитуються через колекцію Keys, але Hashtable можна обійти більш чітким способом. Цикл foreach над DictionaryEntry передає вам ключ і значення кожного елемента разом за один прохід, що є найпоширенішим способом зчитування Hashtable.
Крок 1) Створіть хеш-таблицю та додайте до неї три пари ключ-значення.
Крок 2) Переберіть Hashtable зі змінною DictionaryEntry, а потім зчитайте властивості Key та Value кожного запису.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code Пояснення:
- Створюється хеш-таблиця з іменем ht, і три пари ключ-значення вставляються за допомогою методу Add.
- Цикл foreach призначає кожен елемент об'єкту DictionaryEntry, властивості Key та Value якого розкривають дві половини пари.
Під час виконання програма друкує кожен ключ поруч із його значенням, наприклад, 101 – JavaОскільки хеш-таблиця не зберігає порядок вставки, пари можуть відображатися в іншій послідовності, ніж та, в якій вони були додані. Щоб прочитати лише ключі, переберіть колекцію Keys, а щоб прочитати лише значення, переберіть колекцію Values.
Методи та властивості хеш-таблиці в C#
Клас Hashtable надає невеликий набір методів та властивостей, які охоплюють майже всі необхідні завдання, від додавання та видалення пар до перевірки членства та підрахунку елементів. Найкорисніші члени перелічені нижче.
| Член | тип | Опис |
|---|---|---|
| Додати(ключ, значення) | Метод | Вставляє нову пару ключ-значення; ключ має бути унікальним. |
| Видалити (клавіша) | Метод | Видаляє елемент, що відповідає заданому ключу. |
| Очистити() | Метод | Видаляє кожну пару ключ-значення з хеш-таблиці. |
| ContainsKey(ключ) | Метод | Повертає значення true, коли заданий ключ присутній. |
| МіститьЗначення(значення) | Метод | Повертає значення true, коли задане значення присутнє. |
| Рахувати | властивість | Отримує кількість збережених пар ключ-значення. |
| Ключі | властивість | Повертає колекцію всіх ключів. |
| Цінності | властивість | Повертає колекцію всіх значень. |
Оскільки кожен ключ хешується, ContainsKey та індексатор знаходять елемент майже за постійний час, що робить Hashtable таким корисним для швидкого пошуку.
Різниця між хеш-таблицею та словником у C#
Хеш-таблиця та словник зберігають пари ключ-значення, і обидва належать до ширшої родини C#. колекціїВажлива різниця полягає в безпеці типів, і ця різниця визначає, до якого з них слід звертатися в новому коді.
- Безпека типу: Хеш-таблиця зберігає кожен ключ і значення як об'єкт, тоді як словник є узагальненим, тому компілятор перевіряє типи, які ви використовуєте.
- Простір імен: Хеш-таблиця знаходиться в System.Collections, тоді як словник знаходиться в System.Collections.Generic.
- Boxing: Хеш-таблиця містить значення таких типів, як int, але загальний словник зберігає їх безпосередньо та уникає цих витрат.
- Продуктивність: Словник зазвичай швидший, оскільки йому не потрібно повертати типи з об'єкта під час читання значення.
- Безпека потоків: Hashtable пропонує Syncхронізована обгортка для одного автора з багатьма читачами, тоді як паралельний код зазвичай обирає ConcurrentDictionary.
Для будь-якого нового проєкту рекомендованим вибором є загальний словник (Dictionary), а незагальний хеш-таблиця (Hashtable) здебільшого зустрічається у старішому коді.




