xy 未实现 Vec<f64> / 特征 `Ord` 的最小值/最大值

til*_*til 7 rust

基于答案(导致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