展平并组合嵌套结构中的字段

问题描述 投票:0回答:1

我有一个结构体结构,其中包含行星信息,例如位置速度等

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 还很陌生,所以这是迄今为止我所拥有的最好的方法。 有没有更有效的方法将该数据的克隆版本放入矩阵中?

rust struct iterator nalgebra
1个回答
0
投票

我找到了更简化的解决方案 -

let temp_vec = &self.system_vec
               .iter()
               .flat_map(|body| body.pos.clone().into_iter())
               .collect::<Vec<f64>>();
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.