Чтобы получить индекс при итерации по Iterator
, вы можете использовать Iterator::enumerate
.
let arr = [1, 2, 3, 4];
let (a, b): (Vec<_>, Vec<_>) = arr.iter().enumerate().partition(|(i, _)| i % 2 == 0);
Проблема состоит в том, чтобы "не перечислить" вектор. Для этого вы можете использовать эту функцию:
fn unenumerate<T>(a: impl IntoIterator<Item = (usize, T)>) -> Vec<T> {
a.into_iter().map(|(_, e)| e).collect()
}
В сочетании это позволит вам получить желаемый результат:
println!("{:?} {:?}", unenumerate(a), unenumerate(b)); // [1, 3] [2, 4]