"...с помощью хэша мы получаем УЖЕ отсортированную по годам..." - утверждение ложно (в применении к парсеру)
Misha v.3 15.08.2003 19:22
/ 15.08.2003 19:28
покажите мне SQL который вернет нам хеш?
результаты sql запросов (когда достаем данные) - строкового или табличного вида.
это парсер сам делает из подобных табличных данных хеш.
кстати в данном случае если уж говорить о красоте представления данных, то лучше достать таблицу и сделать из нее хеш таблиц с помощью .hash[year][$.distinct[tables]]
тогда мы получим хеш, где ключи - года, а значения - таблицы с записями за данный год.
однако в этом случае действительно, неудобно получается то, что этот хеш несортирован. правда говорить тут о какой-то сортировке по умолчанию сложно: как добавлялись данные в хеш неизвестно (запросом получены), и один найдет задачу в которой потребуется сортировка по ключу, а другой - по значению (функции). однако мне видится, что реализовать это самому достаточно просто, и вносить это в парсер можно, но... не обязательно :)
пример (есссно можно усложнить и ввести возможности сортировки как вам угодно):
# пишем метод foreach, который даст нам требуемый функционал
@foreach[h;k;v;code][key]
$key[^h._keys[]]
^key.sort{$key.key}
^key.menu{
$caller.$k[$key.key]
$caller.$v[$h.[$key.key]]
$code
}
@main[]
# собственно исходные данные - таблица
$t[^table::create{id year name
1 2000 мама0
2 2001 мама1
3 2000 папа0
4 2001 папа1
}]
# делаем хеш таблиц
$h[^t.hash[year][$.distinct[tables]]]
# зовем наш написаный оператор, который выведет нам наш хеш таблиц
^foreach[$h][k;v]{
<b>$k</b><br />
^v.menu{
$v.year=$v.name
}[<br />]
<br /><br />
}
P.S. работает >= 3.0.8, иначе надо писать свой $h[^t.hash[year][$.distinct[tables]]], как писать - есть в примерах (lib.p)
P.P.S. про это есть
пример в докеP.P.P.S. написать необходимый оператор из ~7 строк, который потом можно юзать - по моему это не очень сложно...