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

ARRAY_REVERSE_SPLIT

Назначение​

Разбивает входной массив на несколько подмассивов в соответствии с заданными логическими флагами.

  • Правило разбиения (слева направо): для arr=[a1,a2,...,an] и flags=[f1,f2,...,fn] в каждой позиции, где fi==true, разбиение выполняется между ai и a(i+1).
    • Например, для arr=[3, 4, 5] и flags=[false, true, false] второй флаг равен true, поэтому разбиение выполняется между вторым и третьим элементами. В результате получаются два подмассива: [3, 4] и [5].

Синтаксис​

  • ARRAY_REVERSE_SPLIT(arr, flags)
  • ARRAY_REVERSE_SPLIT(lamda, arr0, ...)
  • ARRAY_REVERSE_SPLIT(lambda, arr0, ...) эквивалентно ARRAY_REVERSE_SPLIT(arr0, ARRAY_MAP(lambda, arr0, ...))

Параметры​

  • arr: ARRAY<T>.
  • flags: ARRAY<BOOLEAN>, длина которого должна совпадать с длиной arr в каждой строке. true означает разбиение между текущим и следующим элементами.
  • arr0, ...: один или несколько массивов ARRAY<T>.
  • lambda: выражение lambda, применяемое к arr0, ... для получения flags, которые затем используются для разбиения.

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

  • Возвращает ARRAY<ARRAY<T>>. Элементы вложенных массивов совпадают с элементами arr.
  • Если количество элементов в arr и flags не совпадает, возникает ошибка.

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

  • Если значение в какой-либо позиции flags равно NULL, разбиение в этой позиции не выполняется (эквивалентно false).
  • Правило разбиения для ARRAY_REVERSE_SPLIT: в каждой позиции, где fi==true, разбиение выполняется между ai и a(i+1).
  • Правило разбиения для ARRAY_SPLIT: в каждой позиции, где fi==true, разбиение выполняется между ai и a(i-1).

Примеры​

  • Базовое разбиение: в каждой позиции со значением true разбиение выполняется между текущим элементом и его правым соседом.

    • ARRAY_REVERSE_SPLIT([1,2,3,4,5], [false,true,false,true,false]) -> [[1,2], [3,4], [5]]
    • ARRAY_REVERSE_SPLIT(['a','b','c'], [false,false,false]) -> [['a','b','c']]
  • При наличии NULL в flags: NULL обрабатывается так же, как false (без разбиения).

    • ARRAY_REVERSE_SPLIT([1,NULL,3], [false,null,false]) -> [[1, NULL, 3]]
  • lambda= x -> x-1 при применении к arr=[1, 2, 3] даёт flags=[0,1,2], что эквивалентно flags=[false,true,true]

    • ARRAY_REVERSE_SPLIT(x->x-1, [1, 2, 3]) эквивалентно ARRAY_REVERSE_SPLIT([1, 2, 3], [false,true,true]) -> [[1, 2], [3]]
  • lambda= (x,y) -> x-y при применении к arr=[1, 2, 3] и arr1=[0,1,2] даёт flags=[true,true,true]

    • ARRAY_REVERSE_SPLIT((x,y) -> x-y, [1, 2, 3], [0, 1, 2]) эквивалентно ARRAY_REVERSE_SPLIT([1, 2, 3], [true,true,true]) -> [[1], [2], [3]]