2个版本
使用旧的Rust 2015
0.1.1 | 2021年3月27日 |
---|---|
0.1.0 | 2021年3月27日 |
在数据结构分类中排名第1864
8KB
120 行
sorting-vec
一个简单的crate,使用BTreeMap对向量进行排序。它使得删除重复项变得容易,而且与归并排序等算法相比没有真正的性能优势,但它很有趣,实现起来也很有趣。这个crate包含一个名为BTreeSort
的trait,其中包含以下函数
uniques -> Vec<T>
- 返回升序排序的唯一值。sorted -> Vec<T>
- 返回升序排序的值。reverse_uniques -> Vec<T>
- 返回降序排序的唯一值。reverse_sort -> Vec<T>
- 返回降序排序的值。
以及提供支持这种排序的中间结构的函数 btree_sort
。
使用函数 btree_sort
和 trait BTreeSort
use sorting_vec::{btree_sort, BTreeSort};
#[test]
fn integers() {
let vec = vec![7, 3, 4,5, 6,8,3,2, -4, 5, 7,8, 0,9];
let sort = btree_sort(vec);
assert_eq!(sort.clone().uniques(), vec![-4, 0, 2, 3, 4, 5, 6, 7, 8, 9]);
assert_eq!(sort.sorted(), vec![-4, 0, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9]);
}
#[test]
fn usize() {
let vec: Vec<usize> = vec![7, 3, 4,5, 6,8,3,2, 5, 7,8, 0,9];
let sort = btree_sort(vec);
assert_eq!(sort.clone().uniques(), vec![0, 2, 3, 4, 5, 6, 7, 8, 9]);
assert_eq!(sort.clone().sorted(), vec![0, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9]);
assert_eq!(sort.reverse_uniques(), vec![9, 8, 7, 6, 5, 4, 3, 2, 0]);
}
#[test]
fn chars() {
let vec = vec!['h', 'g', 'p', 'a', 'c', 'g'];
let sort = btree_sort(vec);
assert_eq!(sort.clone().uniques(), vec!['a', 'c', 'g', 'h', 'p']);
assert_eq!(sort.clone().sorted(), vec!['a', 'c', 'g', 'g', 'h', 'p']);
assert_eq!(sort.reverse_sort(), vec!['p', 'h', 'g', 'g', 'c', 'a']);
}
#[test]
fn string() {
let vec = vec!["ha", "he", "ga", "12", "pow", "he", "543", "as", "cd", "ga"];
let sort = btree_sort(vec);
assert_eq!(sort.clone().uniques(), vec!["12", "543", "as", "cd", "ga", "ha", "he", "pow"]);
assert_eq!(sort.sorted(), vec!["12", "543", "as", "cd", "ga", "ga", "ha", "he", "he", "pow"]);
}
使用 trait BTreeSort
use sorting_vec::{BTreeSort};
#[test]
fn vec_usize() {
let vec: Vec<usize> = vec![7, 3, 4, 5, 6, 8, 3, 2, 5, 7, 8, 0, 9];
assert_eq!(vec.clone().uniques(), vec![0, 2, 3, 4, 5, 6, 7, 8, 9]);
assert_eq!(
vec.clone().sorted(),
vec![0, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 8, 9]
);
assert_eq!(vec.reverse_uniques(), vec![9, 8, 7, 6, 5, 4, 3, 2, 0]);
}