当我只需要访问结构的一个成员时迭代结构向量

Iterating over a vector of structs when I only need access to only one member of the struct

我有一个结构向量。它被称为更新,我想通过减少结构来减少这个向量以获得最大波速。我试图减少使用 rayon 库中的 par_iter() 。由于身份 (id) 和运算符 (op) 函数的输入和输出类型不同,因此我的代码无法编译。有没有办法让迭代器只看到 max_wavespeed 字段,或者我必须 return 更新结构并且包含降低的波速?

#[derive(Clone, Copy)]
pub struct Updates {
    pub h_update_left: f32,
    pub h_update_right: f32,
    pub hu_update_left: f32,
    pub hu_update_right: f32,
    pub max_wavespeed: f32,
}

...

let mut updates: Vec<Updates> = vec![Updates::new(); outer * inner];

...

//get max wavespeed
let id = || -> f32 { 0.0f32 };
let op = |upd1: Updates, upd2: Updates| -> f32 {
   f32::max(upd1.max_wavespeed, upd2.max_wavespeed)
};
let max_wavespeed: f32 = updates.par_iter().cloned().reduce(id, op);

我在这段代码中遇到的错误:

error[E0308]: mismatched types
  --> src/block.rs:95:34
   |
95 |         let max_wavespeed: f32 = updates.par_iter().cloned().reduce(id, op);
   |                            ---   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `f32`, found struct `Updates`
   |                            |
   |                            expected due to this

我想要的是:了解我是否可以迭代更新结构的成员,或者我是否必须 return 更新结构。

 let id = || -> f32 { 0.0f32 };
 let op = |upd1: f32, upd2: f32| -> f32 { f32::max(upd1, upd2) };       

 let max_wavespeed_x: f32 = updates
            .par_iter()
            .cloned()
            .map(|updates| updates.max_wavespeed)
            .reduce(id, op);

此代码会产生所需的行为。