Последнее обновление
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]]