сортироватьПоУбыванию
Функция сортироватьПоУбыванию возвращает копию списка, элементы которой расположены по убыванию.
Синтаксис
сортироватьПоУбыванию(элемент из список, выражение)
Параметры:
элемент— имя текущего элемента списка. Задаётся непосредственно в функции и используется в выражении сортировки;список— идентификатор спискового поля, элементы которого необходимо отсортировать;выражение— значение, по которому определяется порядок элементов.
Имя текущего элемента можно выбрать самостоятельно. Оно используется только внутри функции.
Список с простыми элементами
Если список содержит простые значения, сортировка выполняется по значению текущего элемента.
Например:
сортироватьПоУбыванию(число из списокЧисел, число)
Здесь:
списокЧисел— идентификатор спискового поля;число— имя текущего элемента списка;- второе
число— значение, по которому выполняется сортировка.
Список с составными элементами
Если элементы списка являются составными полями, в выражении указывается вложенное поле, по которому необходимо выполнить сортировку.
Например:
сортироватьПоУбыванию(товар из товары, товар.стоимость)
Здесь:
товары— идентификатор спискового поля;товар— имя текущего элемента списка;стоимость— идентификатор вложенного поля;товар.стоимость— значение, по которому выполняется сортировка.
Возвращаемое значение
Функция возвращает отсортированную копию исходного списка.
Исходный список при этом не изменяется.
Чтобы вывести элементы отсортированного списка в документе, используйте результат функции сортироватьПоУбыванию внутри конструкции цикл.
Примеры
Сортировка списка чисел
Допустим, в шаблоне есть списковое поле с идентификатором:
списокЧисел
Оно содержит:
| Позиция | Значение |
|---|---|
| 1 | 8 |
| 2 | 3 |
| 3 | 12 |
| 4 | 5 |
Чтобы вывести значения по убыванию, используйте функцию сортироватьПоУбыванию внутри конструкции цикл:
{цикл(число из сортироватьПоУбыванию(элемент из списокЧисел, элемент))}
{число}
{/цикл}
Здесь:
списокЧисел— идентификатор исходного спискового поля;элемент— имя текущего элемента внутри функциисортироватьПоУбыванию;- второе
элемент— значение, по которому выполняется сортировка; сортироватьПоУбыванию(...)— возвращает отсортированную копию списка;число— имя текущего элемента отсортированного списка внутри конструкциицикл.
Результат:
12
8
5
3
Исходный список списокЧисел при этом не изменяется.
Сортировка товаров по стоимости в табличном цикле
Допустим, в шаблоне есть списковое поле с идентификатором:
товары
Каждый элемент списка является составным полем и содержит:
наименование— идентификатор поля с названием товара;стоимость— идентификатор поля со стоимостью товара.
Исходный список:
| Позиция | наименование |
стоимость |
|---|---|---|
| 1 | Монитор | 15000 |
| 2 | Клавиатура | 800 |
| 3 | Принтер | 12000 |
| 4 | Мышь | 600 |
Чтобы вывести товары в таблице от самой высокой стоимости к самой низкой, используйте функцию сортироватьПоУбыванию внутри табличного цикла:
{t_цикл(позиция из сортироватьПоУбыванию(товар из товары, товар.стоимость))}
{позиция.наименование} | {позиция.стоимость}
{/t_цикл}
Здесь:
товары— идентификатор исходного спискового поля;товар— имя текущего элемента внутри функциисортироватьПоУбыванию;товар.стоимость— значение, по которому выполняется сортировка;сортироватьПоУбыванию(...)— возвращает копию списка с элементами, расположенными по убыванию стоимости;позиция— имя текущего элемента отсортированного списка внутри табличного цикла;позиция.наименованиеипозиция.стоимость— поля, значения которых выводятся в ячейках повторяемой строки.
В результате строки таблицы будут расположены так:
| Наименование | Стоимость |
|---|---|
| Монитор | 15000 |
| Принтер | 12000 |
| Клавиатура | 800 |
| Мышь | 600 |
Исходный список товары при этом сохраняет первоначальный порядок элементов.
Сортировка по результату выражения
В качестве критерия сортировки можно использовать не только значение поля, но и результат выражения.
Допустим, список товары дополнительно содержит поле:
количество
Исходные данные:
наименование |
стоимость |
количество |
|---|---|---|
| Стул | 3500 | 4 |
| Стол | 7500 | 1 |
| Шкаф | 12000 | 2 |
Нужно вывести товары по убыванию общей стоимости позиции:
стоимость × количество
Выражение:
{цикл(позиция из сортироватьПоУбыванию(товар из товары, товар.стоимость * товар.количество))}
{позиция.наименование}
{/цикл}
Здесь:
товары— идентификатор спискового поля;товар— имя текущего элемента внутри функциисортироватьПоУбыванию;стоимостьиколичество— идентификаторы вложенных полей;товар.стоимость * товар.количество— выражение, результат которого используется для сортировки;позиция— имя текущего элемента отсортированного списка внутри цикла.
Для каждого элемента будет вычислено значение:
наименование |
Расчёт | Значение для сортировки |
|---|---|---|
| Стул | 3500 × 4 |
14000 |
| Стол | 7500 × 1 |
7500 |
| Шкаф | 12000 × 2 |
24000 |
Результат:
Шкаф
Стул
Стол
Вычисленное значение используется только для определения порядка элементов и не изменяет данные исходного списка.