Вы также можете использовать enumerate
!
let v = vec![1; 10]
.iter()
.enumerate()
.map(|(i, &x)| x + i)
.collect::<Vec<_>>();
println!("v{:?}", v); // prints v[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Посмотрим, как это работает. Iterator::enumerate
возвращает Enumerate<Self>
. Этот тип также реализует Iterator
:
impl<I> Iterator for Enumerate<I>
where
I: Iterator,
{
type Item = (usize, <I as Iterator>::Item);
// ...
}
Как видите, новый итератор выдает кортежи индекса и исходного значения.