4个版本
0.2.1 | 2020年1月16日 |
---|---|
0.2.0 | 2020年1月16日 |
0.1.1 | 2019年10月7日 |
0.1.0 | 2019年10月4日 |
#143 in #match
用于 fast-map
10KB
211 行
fast-map
一个小型库和自定义 derive,用于创建一个使用 match 表达式进行 get
和 insert
操作的类似 map 的结构体。
如果你在编译时知道你的键,这个库在支持的操作上可能会比 HashMap
更快。
为包装结构体提供以下操作(通过 derive
宏)
MyMap::get
,返回Result<Option<&V>, Error>
MyMap::get_mut
,返回Result<Option<&mut V>, Error>
MyMap::insert
,返回Result<Option<V>, Error>
,其中V
是旧值(如果存在)MyMap::remove
,返回Result<Option<V>, Error>
MyMap::values
,返回一个&V
迭代器
如果你知道你的操作不会失败(例如,如果你的键类型是 enum
,并且你将所有变体作为键列出),你可以在 derive 属性中添加 infallible = true
,这将 unwrap
你映射操作的结果。
用法
fn main() {
pub enum A { A, B, C, D };
#[derive(Default, fast_map::FastMap)]
// We know this cannot fail, since we list all the `enum` variants, so we add `infallible = true`
#[fast_map(infallible = true, keys(A::A, A::B, A::C, A::D))]
struct Foo(fast_map::Map4<A, String>);
let mut foo = Foo::default();
foo.insert(A::B, "B".into());
assert_eq!(foo.get(A::B), Some(&"B".to_string()));
assert_eq!(foo.get(A::C), None);
foo.insert(A::C, "C".into());
assert_eq!(foo.values().collect::<Vec<_>>().len(), 2);
}
变更日志
0.2.1
- 将无错误操作的依赖关系重新添加为宏属性(
infallible = true
)。默认为false
。
0.2.0
- 移除了
easy
和strict
MapLike
特质。对于get
等操作,显式处理未知键更好。 - 将
get_mut
操作添加到包装结构体中
当前版本:0.2.1
许可:MIT
依赖项
~1.5MB
~35K SLoC