1 个不稳定版本

0.1.0 2020年6月7日

2273数据结构

Download history 222/week @ 2024-01-19 115/week @ 2024-01-26 135/week @ 2024-02-02 135/week @ 2024-02-09 122/week @ 2024-02-16 117/week @ 2024-02-23 73/week @ 2024-03-01 159/week @ 2024-03-08 253/week @ 2024-03-15 268/week @ 2024-03-22 179/week @ 2024-03-29 179/week @ 2024-04-05 145/week @ 2024-04-12 121/week @ 2024-04-19 133/week @ 2024-04-26 149/week @ 2024-05-03

每月591 次下载

MIT/Apache

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 许可证定义的任何有意提交以包含在作品中的贡献,均应按上述方式双许可,而不附加任何其他条款或条件。

无运行时依赖项