Flatten and combine field from nested struct

I have a struct body struct that contains planet info such as position velocity etc

pub struct Body {
    pub id: u8,
    pub pos: Vec<f64>,
    pub vel: Vec<f64>,

pub struct Data {
    pub system_vec: Vec<Body>,

To put all the pos/vel vecs into a nalgebra matrix I need to first flatten all the body vecs into an iterator I can feed to the nalgebra api.

let ncols: &usize = &self.system_vec.len();
let temp_vec = &data.system_vec
                    .map(|body| body.pos.clone())

na::OMatrix::<f64, U3, Dyn>::from_iterator(

My question is this seems to be incredibly over engineered. I'm iterating and then collecting and then iterating again. I'm sure there is a better way but I'm quite new to rust so this is the best I've got so far. Is there a more efficient way to get a cloned version of this data into the matrix?


  • I've found a more streamlined solution -

    let temp_vec = &self.system_vec
                   .flat_map(|body| body.pos.clone().into_iter())