rust 从嵌套结构中展开和合并字段

nxagd54h  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(176)

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

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

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

字符串
为了把所有的pos/vel向量放到一个nalgebra矩阵中,我需要首先把所有的body向量放平到一个迭代器中,我可以把它提供给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 ,所以这是最好的,我已经到目前为止。有没有一个更有效的方法来获得一个克隆版本的数据到矩阵?

tquggr8v

tquggr8v1#

我找到了一个更简单的解决方案-

let temp_vec = &self.system_vec
               .iter()
               .flat_map(|body| body.pos.clone().into_iter())
               .collect::<Vec<f64>>();

字符串

相关问题