使用旧Rust 2015
0.2.2 |
|
---|---|
0.2.1 |
|
0.2.0 |
|
0.1.0 |
|
#13 in #wish
21KB
208 代码行
此crate已被重命名为ord_subset。请使用,https://github.com/Emerentius/ord_subset
almost_ord
用于处理特定类型(如 f32
、f64
)的Ord
子集的crate。
许可协议
根据Apache License 2.0 http://www.apache.org/licenses/LICENSE-2.0 或MIT许可 http://opensource.org/licenses/MIT 授予许可,具体选择由您决定。此文件不得复制、修改或分发,除非根据这些条款。
lib.rs
:
曾想对一个浮点数的迭代器调用 .max()
吗?现在您可以这样做了!嗯,几乎可以:.partial_max()
。
此crate用于类似浮点原始类型 f32
和 f64
的类型:除了这些特定值之外,这些类型是完全有序的。
我将这些类型称为近似有序。可以使用此crate定义的 AlmostOrd
trait对这些类型进行标记。可以将这些类型放入 OrdVar
结构体中。将值包裹在这个结构体中会告诉其他代码内容是有序的,从而满足泛型 Ord
特性约束。
为了方便,已扩展迭代器和切片,以便近似有序类型可以访问与 .max()
和 .sort()
相等的方法。在近似有序类型的无序子集中处理值时,会采用一致的方式(忽略或放在末尾)。
稳定性
这个包仅限于扩展 std 中的稳定函数,以便能够基于稳定版本进行构建。因此,对 min_by()
、max_by()
和 min_max()
的扩展尚未包含(如果需要,可以从中复制出来。它们只是被注释掉了)。
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
almost_ord = "~0.1.0"
extern crate almost_ord;
use almost_ord::{AlmostOrdIterExt, AlmostOrdSliceExt};
fn main() {
// Slices. Works on vector, too.
let mut s = [5.0, std::f64::NAN, 3.0, 2.0];
s.partial_sort();
assert_eq!(&s[0..3], &[2.0, 3.0, 5.0]);
assert_eq!(s.partial_binary_search(&5.0), Ok(2));
// iterators
assert_eq!( s.iter().partial_max(), Some(&5.0) );
assert_eq!( s.iter().partial_min(), Some(&2.0) );
}
许可协议
根据Apache License 2.0 http://www.apache.org/licenses/LICENSE-2.0 或MIT许可 http://opensource.org/licenses/MIT 授予许可,具体选择由您决定。此文件不得复制、修改或分发,除非根据这些条款。