Метод find
Метод find проходит по элементам итератора
и возвращает первый элемент, для которого
функция-предикат вернула true. Если ни один
элемент не удовлетворяет условию, метод возвращает
None. Параметром метод принимает замыкание,
которое получает ссылку на очередной элемент и
возвращает bool.
Метод возвращает значение типа Option:
Some с найденным элементом или None.
При этом find забирает элемент по значению,
то есть итератор должен быть владеющим.
Синтаксис
iterator.find(predicate)
Пример
Давайте найдём первое чётное число в векторе:
fn main()
{
let res = vec![1, 3, 4, 5, 6].into_iter().find(|x| x % 2 == 0);
println!("{:?}", res);
}
Результат выполнения кода:
Some(4)
Пример
Давайте попробуем найти элемент, которого нет в итераторе:
fn main()
{
let res = vec![1, 3, 5, 7].into_iter().find(|x| x % 2 == 0);
println!("{:?}", res);
}
Результат выполнения кода:
None
Пример
Давайте найдём первую строку, начинающуюся с буквы
"a":
fn main()
{
let res = vec!["abcde", "12345", "apple"].into_iter().find(|s| s.starts_with("a"));
println!("{:?}", res);
}
Результат выполнения кода:
Some("abcde")
Пример
Давайте извлечём найденное значение с помощью сопоставления с образцом:
fn main()
{
let iter = vec![10, 20, 30, 40].into_iter();
match iter.find(|x| x > &15)
{
Some(n) => println!("Found: {}", n),
None => println!("Not found"),
}
}
Результат выполнения кода:
"Found: 20"