#排序 #部分排序 #最小值最大值

无需 std try-partialord

安全的可失败排序、最小值、最大值、二分查找函数,适用于部分排序。无需再包裹 f32、f64 进行排序。

4 个版本

0.1.3 2021年4月9日
0.1.2 2021年4月8日
0.1.1 2021年4月8日
0.1.0 2021年4月8日

1020Rust 模式

每月 38 次下载

MIT 许可证

71KB
1K SLoC

try-partialOrd

安全的可失败排序、最小值、最大值、二分查找函数,适用于部分排序。无需再包裹 f32f64 进行排序。

此软件包为仅具有 PartialOrd 但不具有 Ord(例如 f32f64) 的类型提供辅助特质,以使用需要 Ord 的方法,如排序、最小值、最大值和二分查找。这些方法几乎与 Ord 的方法相同,区别在于当 partial_cmp 返回 None 时,它返回 InvalidOrderError。这些特质具有 try_ 方法,如 try_sort 用于 slice::sort。这比使用像 sort_by 这样忽略 partial_cmp 的 None 情况的方法更安全,因为它处理错误而不是引发恐慌。

排序使用与 std 相同的逻辑。

use try_partialord::*;
use rand::distributions::Standard;
use rand::prelude::*;
let mut vec: Vec<f32> = Standard.sample_iter(thread_rng()).take(100).collect();
//no NAN in vec so sort should succed
let sort_result = vec.try_sort();
assert!(sort_result.is_ok());
assert!(vec.try_is_sorted().unwrap_or(false));
vec.push(f32::NAN);
//NAN in vec so sort should fail
let sort_result = vec.try_sort();
assert!(sort_result.is_err());
assert!(vec.try_is_sorted().is_err());

无运行时依赖