blob: 829fea03a012203e1c09a1d072518a60aa7fc4be [file] [log] [blame] [view]
---
{
"title": "ARRAY_SPLIT",
"language": "en-US",
"description": "Split the input array into multiple subarrays according to given boolean flags."
}
---
## Function
Split the input array into multiple subarrays according to given boolean flags.
- Splitting rule (left to right): for `arr=[a1,a2,...,an]` and `flags=[f1,f2,...,fn]`, at every position where `fi==true`, split between `ai` and `a(i-1)`.
- For example, with `arr=[3, 4, 5]` and `flags=[false, true, false]`, the second flag is true, so split between the first and second elements, resulting in two subarrays `[3]` and `[4,5]`.
## Syntax
- `ARRAY_SPLIT(arr, flags)`
- `ARRAY_SPLIT(lambda, arr0, ...)`
- `ARRAY_SPLIT(lambda, arr0, ...)` is equivalent to `ARRAY_SPLIT(arr0, ARRAY_MAP(lambda, arr0, ...))`
## Parameters
- `arr`: `ARRAY<T>`.
- `flags`: `ARRAY<BOOLEAN>`, whose length must match that of `arr` row by row. `true` means split between the current position and the next element.
- `arr0, ...`: one or more `ARRAY<T>`.
- `lambda`: a `lambda` expression applied to `arr0, ...` to produce `flags`, which are then used for splitting.
## Return value
- Returns `ARRAY<ARRAY<T>>`. Elements of inner arrays are the same as those of `arr`.
- If the element counts of `arr` and `flags` do not match, an error is thrown.
## Usage notes
- If a position in `flags` is `NULL`, it is treated as no split (equivalent to `false`).
- The splitting rule of `ARRAY_SPLIT` is: at each position where `fi==true`, split between `ai` and `a(i-1)`.
- The splitting rule of `ARRAY_REVERSE_SPLIT` is: at each position where `fi==true`, split between `ai` and `a(i+1)`.
## Examples
- Basic splitting: at each `true` position, split from the left side neighbor.
- `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']]`
- With `NULL` in `flags`: `NULL` is treated the same as `false` (no split).
- `ARRAY_SPLIT([1,NULL,3], [false,null,false])` -> `[[1,[NULL,3]]`
- `lambda= x -> x-1` applied to `arr0=[1, 2, 3]` produces `flags=[0,1,2]`, equivalent to `flags=[false,true,true]`
- `ARRAY_SPLIT(x->x-1, [1, 2, 3])` is equivalent to `ARRAY_SPLIT([1, 2, 3], [false,true,true])` -> `[[1], [2], [3]]`
- `lambda= (x,y) -> x-y` applied to `arr0=[1, 2, 3]` and `arr1=[0,1,2]` produces `flags=[true,true,true]`
- `ARRAY_SPLIT((x,y) -> x-y, [1, 2, 3], [0, 1, 2])` is equivalent to `ARRAY_SPLIT([1, 2, 3], [true,true,true])` -> `[[1], [2], [3]]`