any_match
Возвращает, соответствует ли хотя бы один элемент массива заданному предикату.
-
Возвращает
true(1), если один или несколько элементов соответствуют предикату. -
Возвращает
false(0), если ни один из элементов не соответствует (особый случай — когда массив пуст). -
Возвращает NULL, если предикат возвращает NULL для одного или нескольких элементов и
falseдля всех остальных элементов.
Эта функция поддерживается начиная с версии v1.5.2.
Синтаксис
any_match(lambda_function, arr1, arr2...)
Возвращает, соответствует ли хотя бы один элемент arr1 заданному предикату в lambda-функции.
Параметры
-
arr1: массив для проверки соответствия. -
arrN: дополнительные массивы, используемые в lambda-функции. -
lambda_function: lambda-функция, используемая для проверки соответствия значений.
Возвращаемое значение
Возвращает значение типа BOOLEAN.
Примечания по использованию
- Lambda-функция следует примечаниям по использованию в array_map().
- Если входной массив равен null или lambda-функция возвращает null, возвращается null.
- Если
arr1пуст, возвращаетсяfalse. - Чтобы применить эту функцию к MAP, перепишите
any_match((k,v)->k>v,map)вany_match(map_values(transform_values((k,v)->k>v, map))). Например,select any_match(map_values(transform_values((k,v)->k>v, map{2:1})));возвращает 1.
Примеры
Проверка, является ли хотя бы один элемент в x меньше элементов в y.
select any_match((x,y) -> x < y, [1,2,8], [4,5,6]);
+--------------------------------------------------+
| any_match((x, y) -> x < y, [1, 2, 8], [4, 5, 6]) |
+--------------------------------------------------+
| 1 |
+--------------------------------------------------+
select any_match((x,y) -> x < y, [11,12,8], [4,5,6]);
+----------------------------------------------------+
| any_match((x, y) -> x < y, [11, 12, 8], [4, 5, 6]) |
+----------------------------------------------------+
| 0 |
+----------------------------------------------------+
select any_match((x,y) -> x < y, [11,12,null], [4,5,6]);
+-------------------------------------------------------+
| any_match((x, y) -> x < y, [11, 12, NULL], [4, 5, 6]) |
+-------------------------------------------------------+
| NULL |
+-------------------------------------------------------+
select any_match((x,y) -> x < y, [], []);
+------------------------------------+
| any_match((x, y) -> x < y, [], []) |
+------------------------------------+
| 0 |
+------------------------------------+
select any_match((x,y) -> x < y, null, [4,5,6]);
+---------------------------------------------+
| any_match((x, y) -> x < y, NULL, [4, 5, 6]) |
+---------------------------------------------+
| NULL |
+---------------------------------------------+