我有一个结构向量。它被称为更新,我想通过减少结构来减少这个向量以获得最大波速。我试图减少使用人造丝库中的 par_iter() 。由于身份 (id) 和运算符 (op) 函数的输入和输出类型不同,我的代码无法编译。有没有办法让迭代器只看到 max_wavespeed 字段,还是我必须返回一个包含降低的波速的更新结构?
#[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
我想要的是:知道我是否可以遍历 Updates 结构的成员,还是必须返回 Upates 结构。