У меня есть Vec<usize>
, и я хотел бы перебрать все четные элементы в нем.По сути, я хотел бы понять идеальный эквивалент Rust для следующего кода C ++:
const std::vector<uint64_t> vector{1, 4, 9, 16, 25};
for (uint64_t index = 0; index < vector.size(); index += 2) {
std::cout << vector[index] << std::endl;
}
Это то, что я получил до сих пор с enumerate
и filter
:
let vector: Vec<usize> = vec![1, 4, 9, 16, 25];
// Prints even-indexed numbers from the Vec.
type PredicateType = fn(&(usize, &usize)) -> bool;
let predicate: PredicateType = |&tuple| tuple.0 % 2 == 0;
for tuple in vector.iter().enumerate().filter(predicate) {
println!("{:?}", tuple.1); // Prints 1, 9, and 25
};
Это кажется немного сложным.Есть ли более простой способ сделать это?
Также я вижу, что кортеж создается на каждой итерации, а затем отбрасывается на каждой альтернативной итерации.Это кажется неэффективным.Есть ли способ сделать это без создания промежуточного кортежа?