基于答案(导致std::cmp 函数),这里是工作游乐场
问题:
我尝试获取 Vec 的最小值/最大值。
由于 f64 有 NAN 和 Infinity,它不满足 Ord 并抱怨:
the trait `Ord` is not implemented for `f64`
Run Code Online (Sandbox Code Playgroud)
对于 NAN / Inf 从未包含在 Vec 中的情况,我怎样才能获得最小值/最大值?
Nik*_*rin 14
问题在于并非所有比较都已定义 -f64仅部分排序。因此,它只实现了PartialOrd,而不是Ord。但是,您可以提供一个比较函数,仅断言每两个值是可比较的。要使用自定义比较函数,您可以使用min_by:
let values = vec![1.0, 0.5, 42.0];
let _ = values.into_iter().min_by(|a, b| a.partial_cmp(b).unwrap());
Run Code Online (Sandbox Code Playgroud)
请记住,如果和不具有可比性,则使用unwrap会出现恐慌。ab
| 归档时间: |
|
| 查看次数: |
7570 次 |
| 最近记录: |