30个稳定版本
1.5.3 | 2023年11月26日 |
---|---|
1.5.1 | 2023年3月22日 |
1.4.4 | 2022年3月5日 |
1.4.3 | 2021年4月21日 |
1.0.6 | 2018年11月13日 |
#132 in 算法
31,034 每月下载量
用于 40 个crate(23个直接使用)
30KB
643 行
字母数字排序
这个crate可以帮助您对包含数字的文件和文件夹的名称进行排序。
动机和示例
使用Rust的本地sort
方法,字符串和路径会被按字典顺序排列。在某些情况下,这并不直观。例如,存在以shot-%N
命名的屏幕截图,如shot-2
、shot-1
、shot-11
。在字典排序后,它们将被排序为shot-1
、shot-11
、shot-2
。然而,我们通常更希望shot-1
、shot-2
、shot-11
的顺序。
let mut names = ["shot-2", "shot-1", "shot-11"];
names.sort();
assert_eq!(["shot-1", "shot-11", "shot-2"], names);
因此,在这种情况下,字母数字排序可能非常有用。
let mut names = ["shot-2", "shot-1", "shot-11"];
alphanumeric_sort::sort_str_slice(&mut names);
assert_eq!(["shot-1", "shot-2", "shot-11"], names);
use std::path::Path;
let mut paths = [Path::new("shot-2"), Path::new("shot-1"), Path::new("shot-11")];
alphanumeric_sort::sort_path_slice(&mut paths);
assert_eq!([Path::new("shot-1"), Path::new("shot-2"), Path::new("shot-11")], paths);
关于compare_*
函数和sort_*
函数
要对切片进行排序,代码也可以写成这样,
use std::path::Path;
let mut paths = [Path::new("shot-2"), Path::new("shot-1"), Path::new("shot-11")];
paths.sort_by(|a, b| alphanumeric_sort::compare_path(a, b));
assert_eq!([Path::new("shot-1"), Path::new("shot-2"), Path::new("shot-11")], paths);
但是不推荐这样做,因为compare_*
函数在每次执行时都试图将数据(例如Path
、CStr
)转换为&str
,因此它们在排序切片时比sort_*
函数慢。
版本 1.3
到 1.4
尽管顺序有所变化,但在API中没有进行破坏性的更改。
"0001"
比"001"
大,而不是相等。"中"
大于"1"
,而不是小于。"第1章"
仍然小于"第1-2章"
,即使"章"
大于"-"
。
无标准
禁用默认功能以编译此crate而不使用std。
[dependencies.alphanumeric-sort]
version = "*"
default-features = false
基准测试
cargo bench
Crates.io
https://crates.io/crates/alphanumeric-sort
文档
https://docs.rs/alphanumeric-sort