Метод enumerate
Метод enumerate преобразует исходный итератор
в итератор, элементами которого являются кортежи
вида (index, value). Индекс начинается
с нуля и увеличивается на единицу для каждого
следующего элемента. Параметров метод не принимает.
Метод возвращает новый итератор типа
Enumerate, который лениво вычисляет индексы
по мере обхода элементов.
Синтаксис
iter.enumerate()
Пример
Давайте пронумеруем элементы вектора
vec!["a", "b", "c", "d", "e"]
с помощью метода enumerate:
fn main()
{
let vec = vec!["a", "b", "c", "d", "e"];
for (index, value) in vec.iter().enumerate() {
println!("{}: {}", index, value);
}
}
Результат выполнения кода:
0: a
1: b
2: c
3: d
4: e
Пример
Давайте соберём результат работы метода
enumerate в новый вектор с помощью
метода collect:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res: Vec<(usize, &i32)> = vec.iter().enumerate().collect();
println!("{:?}", res);
}
Результат выполнения кода:
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
Пример
Метод enumerate удобно комбинировать
с методом filter, например, чтобы
отобрать элементы по чётному индексу:
fn main()
{
let vec = vec!["a", "b", "c", "d", "e"];
let res: Vec<&str> = vec
.iter()
.enumerate()
.filter(|(index, _)| index % 2 == 0)
.map(|(_, value)| *value)
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
["a", "c", "e"]