我有一个结构体结构,其中包含行星信息,例如位置速度等
pub struct Body {
pub id: u8,
pub pos: Vec<f64>,
pub vel: Vec<f64>,
}
pub struct Data {
pub system_vec: Vec<Body>,
}
要将所有 pos/vel vec 放入 nalgebra 矩阵中,我需要首先展平所有主体 vecs 到一个迭代器中,我可以将其提供给 nalgebra api。
let ncols: &usize = &self.system_vec.len();
let temp_vec = &data.system_vec
.iter()
.map(|body| body.pos.clone())
.collect::<Vec<Vec<f64>>>()
.into_iter()
.flatten()
.collect::<Vec<f64>>();
na::OMatrix::<f64, U3, Dyn>::from_iterator(
*ncols,
temp_vec.iter().cloned()
)
我的问题是,这似乎过度设计了。我正在迭代,然后收集,然后再次迭代。 我确信有更好的方法,但我对 rust 还很陌生,所以这是迄今为止我所拥有的最好的方法。 有没有更有效的方法将该数据的克隆版本放入矩阵中?
我找到了更简化的解决方案 -
let temp_vec = &self.system_vec
.iter()
.flat_map(|body| body.pos.clone().into_iter())
.collect::<Vec<f64>>();