| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Сортировка ключей хеша в Template Toolkit |
| Автор: XeLpeR 22.10.2008, 22:38 | ||||
| Доброго времени суток ! У меня назрел очередной вопросик, пожалуйста помогите разобраться Дан хеш массив:
передаем его в тимлейт и используем следующим образом:
В результате элементы будут выводиться отсортированные по ключу, но в лексикографическом порядке, а необходимо чтобы они сортировались как числа ( или хотябы выводились в том же порядке, что и в начальном хеше). |
| Автор: ginnie 23.10.2008, 09:49 | ||
XeLpeR, могу предложить
Для обычных хешей это невозможно впринципе, т.к. внутри хэша данные хранятся всегда в разном порядке. P.S. предложенный вариант сам не проверял, т.к. TT не пользуюсь, взял из документации |
| Автор: XeLpeR 23.10.2008, 14:05 |
| Ура, ура, ура !!! Огромное спсибо, рааботает ! |
| Автор: Tsaregradskiy 28.11.2008, 20:19 | ||||
| Скажите, а если у меня есть следующий хэш my %fields = ( 'first_name' => { 'name' => 'Имя', 'order' => 1, }, 'last_name' => { 'name' => 'Фамилия', 'order' => 2, }, 'email' => { 'name' => 'E-Mail', 'order' => 3, }, ); где поле 'order' означает порядок отображения в Template Toolkit. Как мне отсортировать хэш по этому полю? Добавлено через 1 минуту и 45 секунд
А не поможет ли использование модуля Tie::IxHash? Но пока использовать его мне не удалось. |
| Автор: ginnie 28.11.2008, 20:37 | ||
Tsaregradskiy, а не проще использовать другую структуру?
|
| Автор: Tsaregradskiy 28.11.2008, 21:20 | ||||
Нет, не проще. Во-первых, есть уже куча написанного кода для моей структуры. Во-вторых, это я сокращенно написал, на самом деле там такая структура: 'first_name' => { 'name' => 'Имя', 'type' => 'text', 'size' => '40', 'maxlength' => '', 'value' => '', 'equal' => '', 'mask' => '', 'accept' => 'true', 'marked' => 0, 'order' => 1, }, и т.п. Пока решил проблему следующим образом: [% FOREACH key IN fields_order.nsort %] [% fields.$key.name %] и т.д. [% END %] где fields_order хэш структуры типа { 'first_name' => 1, 'last_name' => 2, и т.д. } Номера беруться на основании поля order хэша fields. З.Ы. Вот как всё мрачно: http://www.perlmonks.org/?node_id=651173 |
| Автор: ginnie 29.11.2008, 02:21 |
| Tsaregradskiy, Вы можете мне объяснить, зачем нужно создавать хэш fields_order и затем его сортировать в шаблоне? Попроще никак нельзя сделать? |