11 个版本 (3 个重大更改)
3.2.2 | 2021 年 12 月 5 日 |
---|---|
3.1.0 | 2021 年 12 月 5 日 |
2.0.0 | 2021 年 12 月 4 日 |
1.0.0 | 2021 年 12 月 4 日 |
0.1.1 |
|
1884 在 数据结构
每月 35 次下载
50KB
1.5K SLoC
collectivity
泛型集合特质。该软件包包含与数据集合相关的各种特质的定义及其实现,包括数组、切片以及来自标准库和一些流行社区软件包的集合类型。
该项目的目标是提供有用的抽象,以便于处理集合,这允许将其实施细节与应用逻辑解耦。这可以使数据结构可互换,从而更容易微调程序的性能特征。
大多数抽象行为已经由底层容器实现。在这种情况下,提供的特质实现只是委托到适当的方法,同时标准化参数和返回类型。
示例
#![feature(box_syntax)]
use collectivity::{nosafety::Insert, Len};
use std::{
collections::{BTreeMap, HashMap, VecDeque},
time::Instant,
};
pub trait MyTraitSelection<K, V>: Insert<K, V> + Len {}
impl<K, V, C: Insert<K, V> + Len> MyTraitSelection<K, V> for C {}
fn main() {
const N: usize = 10_000_000;
let data = (0..N).map(|n| (n, n)).collect::<Vec<_>>();
let collections: &mut [(&str, Box<dyn MyTraitSelection<_, _>>)] = &mut [
("Array", box [0_usize; N] as _),
("Vec", box vec![] as _),
("VecDeque", box VecDeque::new() as _),
("BTreeMap", box BTreeMap::new() as _),
("HashMap", box HashMap::new() as _),
];
collections.iter_mut().for_each(|(name, c)| {
let t = Instant::now();
data.iter().for_each(|(k, v)| c.insert(*k, *v));
println!(
"{:<10}: inserted in {:<15}, len: {}",
name,
format!("{:#?}", t.elapsed()),
c.len()
);
});
}
License: MIT
依赖项
~0–0.8MB
~17K SLoC