9个不稳定版本
0.5.0 | 2024年3月25日 |
---|---|
0.4.2 | 2021年2月5日 |
0.4.0 | 2020年12月23日 |
0.3.0 | 2020年2月8日 |
0.1.3 | 2018年12月8日 |
#229 在 算法 中
每月855次下载
用于 7 个crate(4个直接使用)
31KB
544 行代码
extsort
提供外部排序(即在磁盘上排序)能力,即使在迭代器生成的内容不适合内存的情况下也能工作。排序完成后,返回一个新的排序迭代器。
为了保持所有实现的效率,该crate不处理序列化,而是将此任务留给用户。
排序器可以选择使用 rayon
对内存缓冲区进行排序。当缓冲区足够大以影响并行化的开销时,通常更快。
示例
extern crate extsort;
extern crate byteorder;
use extsort::*;
use byteorder::{ReadBytesExt, WriteBytesExt};
use std::io::{Read, Write};
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd)]
struct MyStruct(u32);
impl Sortable for MyStruct {
fn encode<W: Write>(&self, write: &mut W) -> std::io::Result<()> {
write.write_u32::<byteorder::LittleEndian>(self.0)?;
Ok(())
}
fn decode<R: Read>(read: &mut R) -> std::io::Result<MyStruct> {
read.read_u32::<byteorder::LittleEndian>().map(MyStruct)
}
}
fn main() {
let sorter = ExternalSorter::new();
let reversed_data = (0..1000).rev().map(MyStruct).into_iter();
let sorted_iter = sorter.sort(reversed_data).unwrap();
let sorted_data = sorted_iter.collect::<std::io::Result<Vec<MyStruct>>>().unwrap();
let expected_data = (0..1000).map(MyStruct).collect::<Vec<MyStruct>>();
assert_eq!(sorted_data, expected_data);
}
依赖项
~3–12MB
~140K SLoC