Последнее обновление
ARRAY_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_SPLIT(arr, flags)ARRAY_SPLIT(lambda, arr0, ...)ARRAY_SPLIT(lambda, arr0, ...)эквивалентноARRAY_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_SPLIT: в каждой позиции, гдеfi==true, выполняется разбиение междуaiиa(i-1). - Правило разбиения для
ARRAY_REVERSE_SPLIT: в каждой позиции, гдеfi==true, выполняется разбиение междуaiиa(i+1).
Примеры
-
Базовое разбиение: в каждой позиции со значением
trueразбиение выполняется между текущим элементом и его левым соседом.ARRAY_SPLIT([1,2,3,4,5], [false,true,false,true,false])->[[1], [2, 3], [4, 5]]ARRAY_SPLIT(['a','b','c'], [false,false,false])->[['a','b','c']]
-
При наличии
NULLвflags:NULLобрабатывается так же, какfalse(без разбиения).ARRAY_SPLIT([1,NULL,3], [false,null,false])->[[1, NULL, 3]]
-
lambda= x -> x-1при применении кarr0=[1, 2, 3]формируетflags=[0,1,2], что эквивалентноflags=[false,true,true]ARRAY_SPLIT(x->x-1, [1, 2, 3])эквивалентноARRAY_SPLIT([1, 2, 3], [false,true,true])->[[1], [2], [3]]
-
lambda= (x,y) -> x-yпри применении кarr0=[1, 2, 3]иarr1=[0,1,2]формируетflags=[true,true,true]ARRAY_SPLIT((x,y) -> x-y, [1, 2, 3], [0, 1, 2])эквивалентноARRAY_SPLIT([1, 2, 3], [true,true,true])->[[1], [2], [3]]