Перейти к содержимому
Последнее обновление

ARRAY_SORTBY

Функция​

Сортирует массив values в соответствии с порядком элементов массива keys.

  • Например, если keys равен [3, 0, 2], а values равен [5, 7, 8], после сортировки keys становится [0, 2, 3], а соответствующий массив values становится [7, 8, 5].

Синтаксис​

  • ARRAY_SORTBY(values, keys)
  • ARRAY_SORTBY(lambda, values)
  • ARRAY_SORTBY(lambda, values) эквивалентно ARRAY_SORTBY(values, ARRAY_MAP(lambda, values))

Параметры​

  • values: ARRAY<T>, массив значений для сортировки. Для T поддерживаются числовые, логические и строковые типы, datetime, IP, UUID и т. д. Поддерживаются многомерные массивы, но все элементы массива (независимо от глубины вложенности) должны иметь поддерживаемые типы.
  • keys: ARRAY<T>, массив ключей той же длины, что и values. Для T поддерживаются числовые, логические и строковые типы, datetime, IP, UUID и т. д. Поддерживаются многомерные массивы, но все элементы массива (независимо от глубины вложенности) должны иметь поддерживаемые типы.
  • lambda: выражение lambda, применяемое к values для получения массива keys, используемого при сортировке.

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

  • Возвращает ARRAY<T> того же типа, что и values.
  • Если хотя бы в одной строке количество элементов в values и keys различается, возникает ошибка.

Примечания по использованию​

  • Стабильность: элементы values переупорядочиваются по возрастанию keys. Относительный порядок элементов с одинаковыми ключами не определён.
  • При вызовах функций высшего порядка сначала вычисляется массив keys с помощью ARRAY_MAP, затем values сортируется по keys.

Примеры​

  • Базовый пример: сортировка values по возрастанию keys.

    • ARRAY_SORTBY([10,20,30], [3,1,2]) -> [20,30,10]
    • ARRAY_SORTBY(['a','b','c'], [2,2,1]) -> ['c','a','b']
  • Функция высшего порядка: вычисление keys с помощью lambda и последующая сортировка.

    • ARRAY_SORTBY(x -> x + 1, [3,1,2]) -> [1,2,3] (при значении keys, равном [4,2,3])
    • ARRAY_SORTBY(x -> x*2 <= 2, [1,2,3]) -> [2,3,1] (при значении keys, равном [true,false,false])
  • Если keys или values имеет значение NULL, возвращается values без изменений.

    • array_sortby([10,20,30], NULL) -> [10, 20, 30]
    • array_sortby(NULL, [2,3]) -> NULL
  • Сортировка многомерных массивов: правила сортировки ключей определяются типом вложенных элементов.

    • ARRAY_SORTBY(x -> x[1], [[1,2],[0,1]]) -> [[0, 1], [1, 2]]