Метод hash
Преобразование таблицы в хеш с заданными ключами.
^таблица.hash[ключ]
^таблица.hash[ключ][опции]
^таблица.hash[ключ][столбец_значений]
^таблица.hash[ключ][столбец_значений][опции]
^таблица.hash[ключ]{код_формирующий_значение}
^таблица.hash[ключ]{код_формирующий_значение}[опции]
^таблица.hash[ключ][таблица_со_столбцами_значений]
^таблица.hash[ключ][таблица_со_столбцами_значений][опции]
Ключ может быть задан как:
[строка], которая содержит название столбца; значение этого столбца считается ключом;{код}, результат исполнения которого считается ключом;(математическое выражение), результат вычисления которого считается ключом.
С опциями по умолчанию метод преобразует таблицу в хеш вида:
$хеш[
$.значение_ключа[
$.название_столбца[значение_столбца]
…
]
…
]
Иными словами, метод создает хеш, в котором ключами являются значения, описанные параметром ключ. При этом каждому ключу ставится в соответствие хеш, в котором для всех столбцов таблицы хранятся ассоциации «название столбца — значение столбца в записи».
Если задан столбец значений, то каждому ключу будет соответствовать хеш с одной ассоциацией «название столбца — значение столбца в записи».
Кроме того, можно задать несколько столбцов значений, для этого необходимо передать дополнительным параметром таблицу, в которой перечислены все необходимые столбцы.
Указание столбцов значений как результат выполнения кода доступно с версии [3.4.5]
Опции — хеш с опциями преобразования.
Пример
Есть список товаров, в котором каждый товар имеет наименование и уникальный код — id. Есть прайс-лист товаров, имеющихся в наличии. Вместо названия товара используется id товара из списка. Все это хранится в двух таблицах. Подобные таблицы называются связанными. Нам нужно получить данные в виде «товар — цена», т. е. получить данные сразу из двух таблиц.
# это таблица с нашими товарами
$product_list[^table::create{id name
1 хлеб
2 колбаса
3 масло
4 водка
}]
# это таблица с ценами на товары
$price_list[^table::create{id price
1 6.50
2 70.00
3 60.85
}]
# hash таблицы с ценами по полю id
$price_list_hash[^price_list.hash[id]]
#перебираем записи таблицы с товарами
^product_list.menu{
$product_price[$price_list_hash.[$product_list.id].price]
^rem{ проверяем, есть ли цена на товар в нашем hash }
^if($product_price){
^rem{ печатаем название товара и его цену }
$product_list.name — $product_price<br>
}{
^rem{ а у этого товара нет цены, т. е. его нет в наличии }
$product_list.name — нет в наличии<br>
}
}
В результате получим:
хлеб — 6.50
колбаса — 70.00
масло — 60.85
водка — нет в наличии