Глава 5 хеші - хеш-функції

У цьому розділі перераховані деякі функції, призначені для обробки хешів.

функція keys

Функція keys (% імя_хеша) видає список всіх поточних ключів, наявних в хеше% імя_хеша. Іншими словами, застосування цієї функції еквівалентно поверненню всіх елементів списку з непарними номерами (перший, третій, п'ятий і т.д.) шляхом розгортання хешу% імя_хеша в обліковому контексті, причому функція keys повертає їх саме в цьому порядку. Якщо елементи в хеше відсутні, функція keys повертає порожній список.

Застосуємо цю функцію до хешу з попередніх прикладів:

Як і у всіх інших вбудованих функціях, круглі дужки не обов'язкові: функція keys% fred повністю ідентична keys (% fred).

Цей приклад демонструє також, що окремі елементи хешу можуть інтерполювати в рядки в подвійних лапках. Весь хеш, однак, інтерполювати таким чином не можна *.

* Можна, в принципі, за допомогою зрізу, але тут про зрізах ми не говоримо.

У скалярному контексті функція keys видає число елементів (пар ключ-значення), що містяться в хеше. Наприклад, ви можете з'ясувати, порожній чи хеш, так:

Для того щоб дізнатися, порожній хеш чи ні, потрібно просто використовувати функцію% хеш в скалярному контексті:

функція values

Функція values ​​(% імя_массіва) повертає список всіх поточних значень зазначеного масиву в тому ж порядку, в якому функція keys (% імя_массіва) повертає ключі. Як завжди, круглі дужки не обов'язкові. наприклад:

Масив @lastnames буде містити або значення ( "flintstone", "rubble"), або ( "rubble", "flintstone").

функція each

Для виконання циклу над усім хешем (тобто для перевірки кожного його елемента) можна використовувати функцію keys і отримувати значення по повертається нею ключам. Дійсно, цей метод широко використовується, але є і більш ефективний спосіб - функція each (% імя_хеша), яка повертає пару ключ-значення як двоелементний список. При кожному обчисленні цієї функції для одного хешу повертається чергова пара ключ-значення, поки не будуть перевірені всі елементи. Якщо пар більше немає, each повертає порожній список.

Наприклад, щоб пройти по хешу% lastname з попереднього прикладу, потрібно використовувати щось таке:

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

функція delete

Якщо Ви не знайшли що шукали, то рекомендую скористатися пошуком по сайту: