gpt4 book ai didi

rust - 在 Rust 中迭代 Vec 的备用元素的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 08:20:16 24 4
gpt4 key购买 nike

我有一个 Vec<usize>并希望遍历其中的所有偶数元素。基本上我想了解以下 C++ 代码的理想 Rust 等价物:

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
};

这感觉有点复杂。有没有更简单的方法来做到这一点?

我还看到在每次迭代中都构建了一个元组,然后在每次交替迭代中都将其丢弃。这似乎效率低下。有没有一种方法可以在不构建中间元组的情况下做到这一点?

最佳答案

你应该使用 step_by迭代器方法,它将逐步跳转:

let vector: Vec<usize> = vec![1, 4, 9, 16, 25];

// Prints even-indexed numbers from the Vec.
for item in vector.iter().step_by(2) {
println!("{:?}", item); // Prints 1, 9, and 25
}

要从不同于 0 的索引开始,请将其与 skip 结合使用:

// Prints odd-indexed numbers from the Vec.
for item in vector.iter().skip(1).step_by(2) {
println!("{:?}", item); // Prints 4, 16
}

(Rust playground link)

关于rust - 在 Rust 中迭代 Vec 的备用元素的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55078691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com