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

6
根据答案(该答案链接到std::cmp函数),这里是可用的Playground问题:
我试图获取Vec的最小值/最大值。
由于f64具有NAN和Infinity,它不满足Ord并抱怨:
the trait `Ord` is not implemented for `f64`

如何在 Vec 中不包含 NAN / Inf 的情况下获取最小/最大值?

1个回答

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());

请记住,如果 ab 不可比较,使用 unwrap 会导致程序崩溃。

Note: If a and b are not comparable, using unwrap will cause a panic.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接