如何迭代每个第二个数字
How to iterate over every second number
阅读文档,我注意到一句话:"Rust doesn't have a C style for loop."。所以,我想知道,我怎样才能使循环等效于 for(i = 0; i < 10; i += 2) { }
?
我能想到的方法是这样的:
for i in 0..10 {
if i % 2 == 0 {
//Do stuff
}
}
甚至:
let i = 0;
loop {
if i < 10 {
//Do stuff
i += 2;
} else {
break;
}
}
但我不确定这是最好的方法,尤其是因为它真的很冗长。有没有更好的方法?我猜它会与 iterators 一起使用,但我不确定该怎么做。
现在有 std::iter::range_step
,但它被标记为不稳定并显示消息 "likely to be replaced by range notation and adapters"。
fn main() {
for i in std::iter::range_step(0, 10, 2) {
println!("{:?}", i);
}
}
打印
0
2
4
6
8
itertools crate offers what you want for abitrary iterators. The step function 创建一个迭代器,在每次迭代后跳过 n-1
个元素。
use itertools::Itertools;
let mut it = (0..10).step(2);
assert_eq!(it.next(), Some(0));
assert_eq!(it.next(), Some(2));
assert_eq!(it.next(), Some(4));
assert_eq!(it.next(), Some(6));
assert_eq!(it.next(), Some(8));
assert_eq!(it.next(), None);
现在在 std 中实现了 step_by function
for i in (0..10).step_by(2) {
// Do stuff
}
阅读文档,我注意到一句话:"Rust doesn't have a C style for loop."。所以,我想知道,我怎样才能使循环等效于 for(i = 0; i < 10; i += 2) { }
?
我能想到的方法是这样的:
for i in 0..10 {
if i % 2 == 0 {
//Do stuff
}
}
甚至:
let i = 0;
loop {
if i < 10 {
//Do stuff
i += 2;
} else {
break;
}
}
但我不确定这是最好的方法,尤其是因为它真的很冗长。有没有更好的方法?我猜它会与 iterators 一起使用,但我不确定该怎么做。
现在有 std::iter::range_step
,但它被标记为不稳定并显示消息 "likely to be replaced by range notation and adapters"。
fn main() {
for i in std::iter::range_step(0, 10, 2) {
println!("{:?}", i);
}
}
打印
0
2
4
6
8
itertools crate offers what you want for abitrary iterators. The step function 创建一个迭代器,在每次迭代后跳过 n-1
个元素。
use itertools::Itertools;
let mut it = (0..10).step(2);
assert_eq!(it.next(), Some(0));
assert_eq!(it.next(), Some(2));
assert_eq!(it.next(), Some(4));
assert_eq!(it.next(), Some(6));
assert_eq!(it.next(), Some(8));
assert_eq!(it.next(), None);
现在在 std 中实现了 step_by function
for i in (0..10).step_by(2) {
// Do stuff
}