如题所示:rust构造类似于python的range序列
代码如下:
#[derive(Debug)]
struct Range{
start:f32,
stop:f32,
step:f32,
}
impl Range{
fn new(start:f32,stop:f32,step:f32)->Self{
Range{start:start,stop:stop,step:step,}
}
}
impl Iterator for Range{
type Item = f32;
fn next(&mut self) ->Option<Self::Item>{
if self.start < self.stop{
let r = self.start;
self.start += self.step;
Some(r)
}else{ None }
}
}
fn main(){
let r = Range::new(1.0,10.0,3.0);
println!("新建的结构体:{:?}",r);
let r = Range{start:1.0,stop:10.0,step:3.0};
let k: Vec<_> = r.collect();
println!("使用结构体转成的数组:{:?}",k);
//rev()为反向排序,rust中,一般无法使用浮点数生成序列,但是可以使用上述的结构体生成浮点数序列
let a: Vec<_> = (1..=10).rev().collect();
println!("使用生成器转成的数组:{:?}",a);
}
/*
新建的结构体:Range { start: 1.0, stop: 10.0, step: 3.0 }
使用结构体转成的数组:[1.0, 4.0, 7.0]
使用生成器转成的数组:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
*/