Что такое хеш?

Хеш представляет собой структуру данных, которая, как и массив, может содержать произвольное количество элементов и производить их выборку по мере надобности. Но вместо выборки по числовым индексам, как это делается с массивами, выборка из хешей производится по имени. Иначе говоря, индексы (здесь мы будем называть их ключами) представляют собой не числа, а произвольные уникальные строки. Ключи являются строками. Соответственно вместо выборки из массива элемента с номером 3 мы обращаемся к элементу хеша по имени wilma.

Ключи являются произвольными строками – любое строковое выражение может использоваться в качестве ключа хеша. К тому же они уникальны: подобно тому как в массиве имеется только один элемент с номером, в хеше существует только один элемент с ключом wilma. Хеш также можно представить как «бочку с данными», в которой к каждому элементу прикреплен ярлык. Вы можете запустить руку в бочку, вытащить любой ярлык и посмотреть, какие данные на нем «висят». Однако в бочке не существует «первого» элемента, все элементы лежат вперемежку. В массиве перебор начинается с элемента 0, затем следует элемент 1, затем элемент 2 и т. д. В хеше нет ни фиксированного порядка, ни первого элемента.


Его содержимое представляет собой множество пар «имя-значение».

Ключи и значения являются произвольными скалярными значениями, но ключи всегда преобразуются в строки. Следовательно, если использовать числовое выражение 50/20 в качестве ключа1, оно преобразуется в строку из трех символов "2.5", соответствующую одному из ключей. Как обычно, действует принятая в Perl философия «отсутствия искусственных ограничений»: хеш может иметь произвольный размер – от пустого хеша с нулем пар «ключ-значение» до заполнения всей свободной памяти. Некоторые реализации хешей (например, в языке awk, из которого Ларри позаимствовал идею) с увеличением хеша работают все медленнее и медленнее. В Perl это не так – в нем используется хороший эффективный масштабируемый алгоритм. Таким образом, если хеш состоит всего из трех пар «ключ-значение», Perl очень быстро «запускает руку в бочку» и извлекает нужный элемент. Если хеш состоит из трех миллионов пар, выборка пройдет практически с такой же скоростью. Не бойтесь больших хешей. Также стоит снова напомнить, что ключи всегда уникальны, тогда как значения могут повторяться. В хеше могут храниться числа, строки, значения undef в любых комбинациях. При этом ключи должны быть произвольными, но уникальными строками.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Зачем использовать хеш?
Интерполяция элементов хеша
Обращение к элементам хеша
Присваивание хешей
Типичные операции с хешами

Вернуться в раздел: Perl / 5. Хеши