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],flags第二个为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,利用产生的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']]
-
flags中包含NULL,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]]