hash. Преобразование таблицы в хеш с заданными ключами

^таблица.hash[ключ]
^таблица.hash[ключ][опции]
^таблица.hash[ключ][столбец значений]
^таблица.hash[ключ][столбец значений][опции]
^таблица.hash[ключ]
{код, формирующий значение}   [3.4.5]
^таблица.hash[ключ]
{код, формирующий значение}[опции]   
[3.4.5]
^таблица.hash[ключ][таблица со столбцами значений]
^таблица.hash[ключ][таблица со столбцами значений][опции]

Ключ может быть задан как:
·[строка], которая содержит название столбца; значение этого столбца считается ключом;  
·{код}, результат исполнения которого считается ключом;  
·(математическое выражение), результат вычисления которого считается ключом.  

С опциями по умолчанию метод преобразует таблицу в хеш вида:
$хеш[
        $.значение_ключа[
            $.название_столбца[значение_столбца]
            …
        ]
    …
]

Иными словами, метод создает хеш, в котором ключами являются значения, описанные параметром 
ключ. При этом каждому ключу ставится в соответствие хеш, в котором для всех столбцов таблицы хранятся ассоциации «название столбца - значение столбца в записи».

Если задан
столбец значений, то каждому ключу будет соответствовать хеш с одной ассоциацией «название столбца - значение столбца в записи».

Кроме того, можно задать несколько столбцов значений, для этого необходимо передать дополнительным параметром таблицу, в которой перечислены все необходимые столбцы.

Опции - хеш с опциями преобразования.

$.type[hash|string|table]
hash = значение каждого элемента - хеш (по умолчанию);

string = значение каждого элемента - строка, при этом нужно указать один столбец значений;

table = значение каждого элемента - таблица, при этом нельзя указать столбец значений или таблицa со столбцами значений.

Это сделано для экономии рессурсов, т. к. в результирующем хеше создаются таблицы со ссылками на строки таблиц, уже расположенных в памяти, таким образом, копирования строк таблиц с их содержимым не происходит.

$.distinct(0/1) 
0 = наличие в ключевом столбце одинаковых значений считается ошибкой (по умолчанию);

1 = выбрать из таблицы записи с уникальным ключом.

$.distinct[tables]
Создать хеш из таблиц, содержащих строки с ключом.
Это устаревший ключ, который равносилен одновременному заданию $.distinct(1) и $.type[table].



Пример
Есть список товаров, в котором каждый товар имеет наименование и уникальный код -
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]
#   проверяем, есть ли цена на товар в нашем hash
    ^if($product_price){ 
#       печатаем название товара и его цену
        $product_list.name - $product_price<br />
    }{ 
#       а у этого товара нет цены, т. е. его нет в наличии
        $product_list.name - нет в наличии<br />
    
}

В результате получим:
    хлеб - 6.50
    колбаса - 70.00
    масло - 60.85
    водка - нет в наличии



Copyright © 1997–2024 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 11.09.2024