跳到主要内容
版本: 最新版本-3.5

all_match

返回数组中是否所有元素都匹配给定的谓词。

  • 如果所有元素都匹配谓词,则返回 true (1) (一个特殊情况是当数组为空时)。

  • 如果一个或多个元素不匹配,则返回 false (0)。

  • 如果谓词为一个或多个元素返回 NULL,并且对所有其他元素返回 true,则返回 NULL。

此函数从 v3.0.6 版本开始支持。

语法

all_match(lambda_function, arr1, arr2...)

返回 arr1 中是否所有元素都与 lambda 函数中给定的谓词匹配。

参数

  • arr1:要匹配的数组。

  • arrN:lambda 函数中使用的可选数组。

  • lambda_function:用于匹配值的 lambda 函数。

返回值

返回一个 BOOLEAN 值。

使用说明

  • lambda 函数遵循 array_map() 中的用法说明。
  • 如果输入数组为 null 或 lambda 函数的结果为 null,则返回 null。
  • 如果 arr1 为空,则返回 true
  • 要将此函数应用于 MAP,请将 all_match((k,v)->k>v,map) 重写为 all_match(map_values(transform_values((k,v)->k>v, map)))。 例如,select all_match(map_values(transform_values((k,v)->k>v, map{2:1}))); 返回 1。

示例

检查 x 中的所有元素是否小于 y 中的元素。

select all_match((x,y) -> x < y, [1,2,-8], [4,5,6]);
+---------------------------------------------------+
| all_match((x, y) -> x < y, [1, 2, -8], [4, 5, 6]) |
+---------------------------------------------------+
| 1 |
+---------------------------------------------------+

select all_match((x,y) -> x < y, [1,2,null], [4,5,6]);
+-----------------------------------------------------+
| all_match((x, y) -> x < y, [1, 2, NULL], [4, 5, 6]) |
+-----------------------------------------------------+
| NULL |
+-----------------------------------------------------+

select all_match((x,y) -> x < y, [1,2,8], [4,5,6]);
+--------------------------------------------------+
| all_match((x, y) -> x < y, [1, 2, 8], [4, 5, 6]) |
+--------------------------------------------------+
| 0 |
+--------------------------------------------------+

select all_match((x,y) -> x < y, [], []);
+------------------------------------+
| all_match((x, y) -> x < y, [], []) |
+------------------------------------+
| 1 |
+------------------------------------+

select all_match((x,y) -> x < y, null, [4,5,6]);
+---------------------------------------------+
| all_match((x, y) -> x < y, NULL, [4, 5, 6]) |
+---------------------------------------------+
| NULL |
+---------------------------------------------+