Перейти к содержанию

сортироватьПоУбыванию

Функция сортироватьПоУбыванию возвращает копию списка, элементы которой расположены по убыванию.

Синтаксис

сортироватьПоУбыванию(элемент из список, выражение)

Параметры:

  • элемент — имя текущего элемента списка. Задаётся непосредственно в функции и используется в выражении сортировки;
  • список — идентификатор спискового поля, элементы которого необходимо отсортировать;
  • выражение — значение, по которому определяется порядок элементов.

Имя текущего элемента можно выбрать самостоятельно. Оно используется только внутри функции.

Список с простыми элементами

Если список содержит простые значения, сортировка выполняется по значению текущего элемента.

Например:

сортироватьПоУбыванию(число из списокЧисел, число)

Здесь:

  • списокЧисел — идентификатор спискового поля;
  • число — имя текущего элемента списка;
  • второе число — значение, по которому выполняется сортировка.

Список с составными элементами

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

Например:

сортироватьПоУбыванию(товар из товары, товар.стоимость)

Здесь:

  • товары — идентификатор спискового поля;
  • товар — имя текущего элемента списка;
  • стоимость — идентификатор вложенного поля;
  • товар.стоимость — значение, по которому выполняется сортировка.

Возвращаемое значение

Функция возвращает отсортированную копию исходного списка.

Исходный список при этом не изменяется.

Чтобы вывести элементы отсортированного списка в документе, используйте результат функции сортироватьПоУбыванию внутри конструкции цикл.

Примеры

Сортировка списка чисел

Допустим, в шаблоне есть списковое поле с идентификатором:

списокЧисел

Оно содержит:

Позиция Значение
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

Результат:

Шкаф
Стул
Стол

Вычисленное значение используется только для определения порядка элементов и не изменяет данные исходного списка.