1 个不稳定版本
使用旧的Rust 2015
0.1.0-alpha | 2017年5月14日 |
---|
#298 在 值格式化
用于 depman
10KB
128 行
Humanesort
一个按人类方式排序的crate。
这个crate旨在提供人类可能期望的排序行为。比如说,你有一个所有文件都叫"Something-",后面跟着一个顺序数字的文件夹。使用传统的按字符排序,文件"Something-11"会出现在文件"Something-2"之后。这通常不是期望的行为,这个crate通过将连续数字的出现视为排序中的组合数字来实现更符合人类习惯的排序。
该crate为常见类型(目前仅限于大多数字符串类型)实现了类型HumaneOrder
,为HumanOrder
类型的切片实现了HumaneSortable
。
API非常简单易用
use humanesort::prelude::*;
let mut sort_me = vec!["something-11", "something-1", "something-2"];
sort_me.humane_sort();
assert_eq!(vec!["something-1", "something-2", "something-11"], sort_me);
字符串排序的详细信息
对于排序,字符串被分割成数字和非数字部分。比较从第一组开始,如果没有组(按照任何规则)比另一个组大,则比较移动到下一部分。对于部分比较,使用以下规则。
- 任何非数字都使用它们通常的比较方法进行比较
- 数字始终大于非数字
- 数字序列按其数值排序
- 空序列始终小于非空序列
以下示例应该能让你对实际操作有更清晰的认识
use humanesort::HumaneSortable;
let mut a = ["lol-1", "lal-2"];
a.humane_sort();
assert_eq!(a, ["lal-2", "lol-1"])
use humanesort::HumaneSortable;
let mut a = ["13-zzzz", "1-ffff", "12-aaaa"];
a.humane_sort();
assert_eq!(a, ["1-ffff", "12-aaaa", "13-zzzz"])
依赖关系
~555KB