#collection #traits #generic #slice #community #definition

nightly no-std collectivity

泛型集合特质

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 2021 年 12 月 3 日

1884数据结构

每月 35 次下载

MIT 许可证

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