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

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 и т. д. Поддерживаются многомерные массивы, но все элементы массива (независимо от глубины вложенности) должны иметь поддерживаемые типы.
  • keys: ARRAY<T>, массив ключей той же длины, что и values. В качестве T поддерживаются числовые, логические, строковые типы, datetime, IP и т. д. Поддерживаются многомерные массивы, но все элементы массива (независимо от глубины вложенности) должны иметь поддерживаемые типы.
  • 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]]