假设我们有一个点向量,写成整数的平面序列。矢量的大小是精确的,我们想将其转换为 Point
结构的矢量。所以我的转换目前看起来像这样。
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
impl Point {
fn new(x: i32, y : i32) -> Point {
Point{x,y}
}
}
impl From<Point> for String {
fn from(point: Point) -> String {
format!("({},{})", point.x, point.y)
}
}
fn main() {
let vec = vec![2,1,4,3,6,5]; // We want convert that
let even = vec.iter().step_by(2);
let odd = vec.iter().skip(1).step_by(2);
let points: Vec<Point>
= even.zip(odd)
.map(|(x,y)|Point::new(*x,*y))
.collect();
println!("{:?}", points);
}
工作得很好,直到我们想要添加 z
组件,并在每个周期中查看三个元素。我还没有从 docs 中找到任何合适的方法.那么,是否已经有一种通用的方法可以在 vector 上迭代一定大小的切片并将其解压缩到我的结构中,或者没有这样的方法,我应该自己实现这样的迭代器?它是否是使用一些较重的机器(如 serde
)的信号。
最佳答案
在 std 中使用 chunks_exact 很容易对切片进行操作.
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
z: i32,
}
impl Point {
fn new(x: i32, y : i32, z: i32) -> Point {
Point{x,y, z}
}
}
fn main() {
let vec = vec![2,1,4,3,6,5];
let points: Vec<Point>
= vec.chunks_exact(3)
.map(|chunk|Point::new(chunk[0], chunk[1], chunk[2]))
.collect();
println!("{:?}", points);
}
关于rust - 在一些连续的容器上迭代大小为 N 的切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64227040/