Що таке хеш

Хеш є структурою даних, яка, як і масив, може містити довільну кількість елементів і виробляти їх вибірку у міру потреби. Але замість вибірки по числовим індексам, як це робиться з масивами, вибірка з хешів проводиться по імені. Інакше кажучи, індекси (тут ми будемо називати їх ключами) являють собою не числа, а довільні унікальні рядки. Ключі є рядками. Відповідно замість вибірки з масиву елемента з номером 3 ми звертаємося до елементу хешу по імені wilma.







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








Його вміст являє собою безліч пар «ім'я-значення».

Ключі та значення є довільними скалярними значеннями, але ключі завжди перетворюються в рядки. Отже, якщо використовувати числове вираження 50/20 в якості ключа1, воно перетворюється в рядок з трьох символів "2.5", що відповідає одному з ключів. Як завжди, діє прийнята в Perl філософія «відсутності штучних обмежень»: хеш може мати довільний розмір - від порожнього хешу з нулем пар «ключ-значення» до заповнення всієї вільної пам'яті. Деякі реалізації хешів (наприклад, в мові awk, з якого Ларрі запозичив ідею) зі збільшенням хешу працюють все повільніше і повільніше. У Perl це не так - в ньому використовується хороший ефективний масштабований алгоритм. Таким чином, якщо хеш складається всього з трьох пар «ключ-значення», Perl дуже швидко «запускає руку в бочку» і витягує потрібний елемент. Якщо хеш складається з трьох мільйонів пар, вибірка пройде практично з такою ж швидкістю. Не бійтеся великих хешів. Також варто знову нагадати, що ключі завжди унікальні, тоді як значення можуть повторюватися. У хеше можуть зберігатися числа, рядки, значення undef в будь-яких комбінаціях. При цьому ключі повинні бути довільними, але унікальними рядками.