1 个不稳定版本
0.1.0 | 2020年6月7日 |
---|
2273 在 数据结构
每月591 次下载
15KB
205 行
chain-map
ChainMap
类型按优先顺序将一系列 HashMap
组合在一起,并提供了对值的单一、统一视图。键的语义与 HashMap
相同,然而与给定键关联的值是该键在包含该键的最高优先级映射中的值。
Rust 版本
此版本的 chain-map 需要 Rust 1.31 或更高版本。
优先级
添加到 ChainMap
的映射越早,其优先级越高。因此,链中首先添加的映射将具有最高优先级,而最近添加的映射将具有最低优先级。
性能
每次读取 ChainMap
都会按顺序读取映射链,因此每个操作都将在最坏情况下完成 O(N),其中 N
是链中映射的数量。因此,这应该只在读取次数相对于每个映射中的元素数量较低的情况下使用。
示例
use std::collections::HashMap;
use chain_map::ChainMap;
let mut first_map = HashMap::new();
first_map.insert("first", 10);
let mut second_map = HashMap::new();
second_map.insert("first", 20);
second_map.insert("second", 20);
let mut third_map = HashMap::new();
third_map.insert("first", 30);
third_map.insert("second", 30);
third_map.insert("third", 30);
let mut chain: ChainMap<_, _> =
vec![first_map, second_map, third_map].into_iter().collect();
assert_eq!(chain.get("first"), Some(&10));
assert_eq!(chain["second"], 20);
assert!(chain.contains_key("third"));
assert!(!chain.contains_key("fourth"));
许可证
根据您的选择,许可协议为
- Apache 许可证 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的任何有意提交以包含在作品中的贡献,均应按上述方式双许可,而不附加任何其他条款或条件。