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

如何在Rust中按f64类型price_per_kg字段排序Substance结构体向量

按f64字段排序结构体向量的解决方案

问题原因

sort_unstable_by_key要求排序键实现Ord trait,但f64仅实现了PartialOrd(因为存在NaN这类无法确定比较关系的值),因此无法直接使用该方法。

解决方案1:使用sort_unstable_by处理f64的PartialOrd

直接通过partial_cmp方法比较price_per_kg字段,同时处理partial_cmp返回的Option<Ordering>:

// 确定price_per_kg不会出现NaN时,直接unwrap结果
substances.sort_unstable_by(|a, b| a.price_per_kg.partial_cmp(&b.price_per_kg).unwrap());

// 需要处理NaN的场景(示例:把NaN放到排序结果末尾)
substances.sort_unstable_by(|a, b| {
    a.price_per_kg.partial_cmp(&b.price_per_kg)
        .unwrap_or(std::cmp::Ordering::Greater)
});

解决方案2:避免浮点运算,用整数比值排序(更推荐)

由于price_per_kg本质是price / mass_kg的结果,可通过整数交叉相乘的方式比较比值,既避免浮点精度损失,又天然符合Ord trait要求:

// 按单价升序排序,等价于price_per_kg的比较逻辑
substances.sort_unstable_by(|a, b| (a.price * b.mass_kg).cmp(&(b.price * a.mass_kg)));

// 若需要降序排序,反转比较结果即可
substances.sort_unstable_by(|a, b| (b.price * a.mass_kg).cmp(&(a.price * b.mass_kg)));

注意:该方法要求mass_kg不为0,这在物质质量的实际场景中是合理的前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:32:20