Метод position
Метод position перебирает элементы итератора
и возвращает индекс первого элемента, для которого
замыкание-предикат вернуло true. Если ни один
элемент не удовлетворяет условию, метод возвращает
None. Параметром метод принимает замыкание,
которое получает ссылку на очередной элемент и
возвращает bool.
Метод возвращает значение типа Option<usize>:
Some(индекс) при успехе или None,
если подходящий элемент не найден. Индексация
начинается с нуля.
Синтаксис
iter.position(predicate)
Пример
Давайте найдём индекс первого чётного числа в векторе:
fn main()
{
let vec = vec![1, 3, 4, 5, 6];
let res = vec.iter().position(|&x| x % 2 == 0);
println!("{:?}", res);
}
Результат выполнения кода:
Some(2)
Пример
Давайте найдём индекс элемента, которого нет в векторе:
fn main()
{
let vec = vec![1, 3, 4, 5, 6];
let res = vec.iter().position(|&x| x == 99);
println!("{:?}", res);
}
Результат выполнения кода:
None
Пример
Давайте найдём индекс первой строки, начинающейся
с буквы "c", в векторе строк:
fn main()
{
let vec = vec!["abcde", "12345", "cde"];
let res = vec.iter().position(|&s| s.starts_with("c"));
println!("{:?}", res);
}
Результат выполнения кода:
Some(2)
Пример
Давайте извлечём индекс из результата с помощью
unwrap_or и выведем его как число:
fn main()
{
let vec = vec![10, 20, 30, 40, 50];
let res = vec.iter().position(|&x| x > 25).unwrap_or(0);
println!("{}", res);
}
Результат выполнения кода:
2