Метод any
Метод any проверяет, существует ли в итераторе
хотя бы один элемент, для которого переданная функция-предикат
возвращает true. Если такой элемент найден, метод
немедленно возвращает true и прекращает дальнейший
перебор. В противном случае возвращается false.
Параметром метод принимает замыкание, которое получает
ссылку на очередной элемент и возвращает bool.
Синтаксис
iterator.any(predicate)
Пример
Давайте проверим, есть ли в векторе [1, 2, 3, 4, 5]
хотя бы один чётный элемент:
fn main()
{
let res = vec![1, 2, 3, 4, 5].iter().any(|x| x % 2 == 0);
println!("{}", res);
}
Результат выполнения кода:
true
Пример
Давайте проверим, есть ли в векторе [1, 2, 3, 4, 5]
хотя бы один элемент, больший десяти:
fn main()
{
let res = vec![1, 2, 3, 4, 5].iter().any(|x| *x > 10);
println!("{}", res);
}
Результат выполнения кода:
false
Пример
Давайте проверим, начинается ли хотя бы одна строка
в векторе ["abcde", "12345", "abcdef"] с подстроки
"abc":
fn main()
{
let res = vec!["abcde", "12345", "abcdef"]
.iter()
.any(|s| s.starts_with("abc"));
println!("{}", res);
}
Результат выполнения кода:
true
Пример
Метод any прекращает перебор, как только находит
подходящий элемент. Давайте убедимся в этом, добавив
вывод каждого проверяемого элемента:
fn main()
{
let res = vec![1, 2, 3, 4, 5].iter().any(|x| {
println!("check {}", x);
*x > 2
});
println!("res = {}", res);
}
Результат выполнения кода:
check 1
check 2
check 3
res = true
Как видно из вывода, после того как был найден элемент
3, удовлетворяющий условию, дальнейшие элементы
4 и 5 не проверялись.
Смотрите также
-
метод
all,
который проверяет, удовлетворяют ли условию все элементы итератора -
метод
find,
который возвращает первый элемент, удовлетворяющий условию -
метод
filter,
который создаёт итератор из элементов, удовлетворяющих условию -
метод
position,
который возвращает позицию первого элемента, удовлетворяющего условию