How should I go if I want to iterate with a custom step in stable Rust? Essentially something like the C/C++
for (in
Iterator::step_by is now stable:
fn main() {
for i in (0..100).step_by(2) {
println!("{}", i);
}
}
You can always write it out the old-fashioned way:
fn main() {
let mut i = 0;
while i < 100 {
println!("i: {}", i);
i += 2;
}
}
Which can then be abstracted:
use std::ops::Add;
fn step_by(start: T, end_exclusive: T, step: T, mut body: F)
where
T: Add
Interesting historical side note, I believe that originally all the looping was done with closures like this, before iterators became extremely prevalent.
You can then take this and make it into an iterator:
use std::ops::Add;
struct StepBy {
start: T,
end_exclusive: T,
step: T,
}
impl StepBy {
fn new(start: T, end_exclusive: T, step: T) -> Self {
Self {
start,
end_exclusive,
step,
}
}
}
impl Iterator for StepBy
where
T: Add
See also: