高阶函数

    示例: x -> 2 * x, str -> str != Referer.

    高阶函数只能接受lambda函数作为其参数。

    高阶函数可以接受多个参数的lambda函数作为其参数,在这种情况下,高阶函数需要同时传递几个长度相等的数组,这些数组将被传递给lambda参数。

    除了’arrayMap’和’arrayFilter’以外的所有其他函数,都可以省略第一个参数(lambda函数)。在这种情况下,默认返回数组元素本身。

    将arr
    将从’func’函数的原始应用程序获得的数组返回到’arr’数组中的每个元素。
    返回从原始应用程序获得的数组 ‘func’ 函数中的每个元素 ‘arr’ 阵列。

    arrayFilter(func, arr1, …)

    返回一个仅包含以下元素的数组 ‘arr1’ 对于哪个 ‘func’ 返回0以外的内容。

    1. ['abc World']
    2. └───────────────┘
    1. SELECT
    2. arrayFilter(
    3. (i, x) -> x LIKE '%World%',
    4. arrayEnumerate(arr),
    5. ['Hello', 'abc World'] AS arr)
    6. AS res
    1. ┌─res─┐
    2. └─────┘

    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’匹配所有元素,直到找到第一个匹配的元素。

    示例:

    1. ┌─res──────────┐
    2. [1, 2, 3, 4]

    arrayCumSumNonNegative(arr)

    与arrayCumSum相同,返回源数组部分数据的总和。不同于arrayCumSum,当返回值包含小于零的值时,该值替换为零,后续计算使用零继续计算。例如:

    1. SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res
    1. ┌─res───────┐
    2. [1,2,0,1]
    3. └───────────┘

    arraySort([func,] arr1, …)

    返回升序排序arr1的结果。如果指定了func函数,则排序顺序由的结果决定。

    Schwartzian变换用于提高排序效率。

    示例:

    1. ┌─res────────────────┐
    2. ['world', 'hello']
    3. └────────────────────┘

    请注意,NULL和NaN在最后(NaN在NULL之前)。例如:

    1. SELECT arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])
    1. ┌─arraySort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
    2. [1,2,3,4,nan,nan,NULL,NULL]
    3. └───────────────────────────────────────────────┘

    arrayReverseSort([func,] arr1, …)

    请注意,NULL和NaN在最后(NaN在NULL之前)。例如:

    1. ┌─arrayReverseSort([1, nan, 2, NULL, 3, nan, 4, NULL])─┐
    2. [4,3,2,1,nan,nan,NULL,NULL]