高阶函数
示例: x -> 2 * x, str -> str != Referer.
高阶函数只能接受lambda函数作为其参数。
高阶函数可以接受多个参数的lambda函数作为其参数,在这种情况下,高阶函数需要同时传递几个长度相等的数组,这些数组将被传递给lambda参数。
除了’arrayMap’和’arrayFilter’以外的所有其他函数,都可以省略第一个参数(lambda函数)。在这种情况下,默认返回数组元素本身。
将arr
将从’func’函数的原始应用程序获得的数组返回到’arr’数组中的每个元素。
返回从原始应用程序获得的数组 ‘func’ 函数中的每个元素 ‘arr’ 阵列。
arrayFilter(func, arr1, …)
返回一个仅包含以下元素的数组 ‘arr1’ 对于哪个 ‘func’ 返回0以外的内容。
│ ['abc World'] │
└───────────────┘
SELECT
arrayFilter(
(i, x) -> x LIKE '%World%',
arrayEnumerate(arr),
['Hello', 'abc World'] AS arr)
AS res
┌─res─┐
└─────┘
arrayCount([func,] arr1, …)
返回数组arr中非零元素的数量,如果指定了’func’,则通过’func’的返回值确定元素是否为非零元素。
arrayExists([func,] arr1, …)
返回数组’arr’中是否存在非零元素,如果指定了’func’,则使用’func’的返回值确定元素是否为非零元素。
返回数组’arr’中是否存在为零的元素,如果指定了’func’,则使用’func’的返回值确定元素是否为零元素。
arraySum([func,] arr1, …)
计算arr数组的总和,如果指定了’func’,则通过’func’的返回值计算数组的总和。
arrayFirst(func, arr1, …)
返回数组中第一个匹配的元素,函数使用’func’匹配所有元素,直到找到第一个匹配的元素。
arrayFirstIndex(func, arr1, …)
返回数组中第一个匹配的元素的下标索引,函数使用’func’匹配所有元素,直到找到第一个匹配的元素。
示例:
┌─res──────────┐
│ [1, 2, 3, 4] │
arrayCumSumNonNegative(arr)
与arrayCumSum相同,返回源数组部分数据的总和。不同于arrayCumSum,当返回值包含小于零的值时,该值替换为零,后续计算使用零继续计算。例如:
SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res
┌─res───────┐
│ [1,2,0,1] │
└───────────┘
arraySort([func,] arr1, …)
返回升序排序arr1
的结果。如果指定了func
函数,则排序顺序由的结果决定。
Schwartzian变换用于提高排序效率。
示例:
┌─res────────────────┐
│ ['world', 'hello'] │
└────────────────────┘
请注意,NULL和NaN在最后(NaN在NULL之前)。例如:
SELECT arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])
┌─arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
│ [1,2,3,4,nan,nan,NULL,NULL] │
└───────────────────────────────────────────────┘
arrayReverseSort([func,] arr1, …)
请注意,NULL和NaN在最后(NaN在NULL之前)。例如:
┌─arrayReverseSort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
│ [4,3,2,1,nan,nan,NULL,NULL] │