table Alt ←

Метод hash

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

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

Ключ может быть задан как:

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

С опциями по умолчанию метод преобразует таблицу в хеш вида:

$хеш[
	$.значение_ключа[
		$.название_столбца[значение_столбца]
		…
	]
	…
]

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

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

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

Указание столбцов значений как результат выполнения кода доступно с версии [3.4.5]

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

Опция Описание
$.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]

	^rem{ проверяем, есть ли цена на товар в нашем hash }
	^if($product_price){ 
			^rem{ печатаем название товара и его цену }
			$product_list.name — $product_price<br>
	}{ 
			^rem{ а у этого товара нет цены, т. е. его нет в наличии }
			$product_list.name — нет в наличии<br>
	} 
}

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