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

Что такое хеш-таблица в C#?
Хэш-таблица — это специальная коллекция, которая используется для хранения элементов «ключ-значение». Таким образом, вместо хранения только одного значения, такого как стек, список массивов и очередь, хеш-таблица хранит два значения. Эти два значения образуют элемент хеш-таблицы.
Ниже приведены примеры того, как могут выглядеть значения хеш-таблицы.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Выше у нас есть 3 пары ключевых значений. Ключи каждого элемента — 001, 002 и 003 соответственно. Значения каждой пары ключ-значение: «. Net“, “C#” и “ASP.Net” соответственно.
Давайте рассмотрим операции, доступные для коллекции Hashtable, более подробно.
Объявление хеш-таблицы
Объявление Hashtable показано ниже. Hashtable создается с помощью типа данных Hashtable. Ключевое слово «new» используется для создания объекта Hashtable. Затем объект присваивается переменной ht.
Hashtable ht = new Hashtable()
Добавление элементов в хэш-таблицу
Метод Add используется для добавления элемента в очередь. Общий синтаксис оператора приведен ниже.
HashTable.add("key","value")
Пример 1:
Помните, что каждый элемент хеш-таблицы состоит из двух значений: одно — ключ, а другое — значение.
Теперь давайте посмотрим, как это работает на уровне кода. Весь приведенный ниже код будет записан в наше консольное приложение.
Код будет записан в наш файл 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, используя ключевое слово «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, чтобы проверить, присутствует ли значение в хеш-таблице. Этот метод вернет «истину», поскольку значение существует в хеш-таблице.
Если приведенный выше код введен правильно и программа запущена, будет отображен следующий вывод.
Выход:
Из вывода вы можете ясно видеть, что искомый ключ и значение присутствуют в хеш-таблице.
Как пройтись циклом по хэш-таблице в C#
В приведенных выше примерах значения считываются из коллекции Keys, но обход хэш-таблицы можно выполнить более чистым способом. Цикл foreach по элементу DictionaryEntry позволяет получить ключ и значение каждого элемента за один проход, что является наиболее распространенным способом чтения хэш-таблицы.
Шаг 1) Создайте хэш-таблицу и добавьте в неё три пары ключ-значение.
Шаг 2) Пройдите циклом по хэш-таблице, используя переменную типа 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(key) | Способ доставки | Возвращает true, если указанный ключ присутствует. |
| ContainsValue(value) | Способ доставки | Возвращает true, если заданное значение присутствует. |
| Количество | Свойства | Получает количество сохраненных пар ключ-значение. |
| Ключи | Свойства | Возвращает коллекцию всех ключей. |
| Наши ценности | Свойства | Возвращает коллекцию всех значений. |
Поскольку каждый ключ хешируется, ContainsKey и индексатор находят элемент практически за постоянное время, что и делает хэш-таблицу такой полезной для быстрого поиска.
Разница между хэш-таблицей и словарем в C#
Хэш-таблица и словарь хранят пары ключ-значение и оба относятся к более широкому семейству языков C#. коллекцииВажное различие заключается в типобезопасности, и именно это различие определяет, какой тип безопасности следует использовать в новом коде.
- Тип безопасности: Хэш-таблица хранит каждый ключ и значение в виде объекта, тогда как словарь Это обобщенный тип, поэтому компилятор проверяет используемые вами типы.
- Пространство имен: Хэш-таблица находится в System.Collections, а словарь — в System.Collections.Generic.
- BoxING: Хэш-таблица хранит значения таких типов, как int, тогда как универсальный словарь хранит их напрямую, избегая этих затрат.
- Производительность: Словарь обычно работает быстрее, потому что при чтении значения не требуется приведение типов из объекта.
- Безопасность резьбы: Хэштаблица предлагает SyncHronized — это обертка для одного автора с множеством читателей, тогда как для параллельного выполнения кода обычно используется ConcurrentDictionary.
Для любого нового проекта рекомендуется использовать универсальный словарь (Dictionary), а неуниверсальная хэш-таблица (Hashtable) в основном встречается в более старом коде.




