You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中就地将Vec<f32>的0值替换为NaN?

就地修改Vec,将0值替换为NaN的正确实现

你遇到的编译错误是因为for_each方法要求闭包返回单元类型()(即无返回值),但你的闭包返回了f32类型的值(f32::NAN或*v),导致类型不匹配。

要实现就地修改,你需要直接对迭代器提供的可变引用进行赋值操作,而非返回值。以下是两种正确写法:

写法1:条件判断后赋值

let mut vector: Vec<f32> = vec![2.0, 0.0, 1.0, 3.0, -1.0, 5.0];
vector.iter_mut().for_each(|v| {
    if *v == 0.0 {
        *v = f32::NAN;
    }
});
println!("{vector:?}");

这种写法仅在值为0时执行修改,其余值保持原样,逻辑清晰直观。

写法2:条件表达式赋值(更简洁)

let mut vector: Vec<f32> = vec![2.0, 0.0, 1.0, 3.0, -1.0, 5.0];
vector.iter_mut().for_each(|v| *v = if *v == 0.0 { f32::NAN } else { *v });
println!("{vector:?}");

通过条件表达式直接生成目标值,再赋值给*v,整个赋值操作的返回值为(),完全符合for_each的要求。

运行后输出结果:

[2.0, NaN, 1.0, 3.0, -1.0, 5.0]

内容的提问来源于stack exchange,提问作者weiji14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:47:28