Crates.io | chain-map |
lib.rs | chain-map |
version | 0.1.0 |
source | src |
created_at | 2020-06-07 22:22:05.350978 |
updated_at | 2020-06-07 22:22:05.350978 |
description | A chain of maps with a single view into the aggregated values. |
homepage | |
repository | https://github.com/charlespierce/chain-map-rs |
max_upload_size | |
id | 251116 |
size | 28,189 |
The ChainMap
type groups a chain of HashMap
s together in precedence
order and provides a single, unified view into the values. The semantics
for keys are the same as for a HashMap
, however the value associated
with a given key is the value of that key in the highest-precedence map
that contains the key.
This version of chain-map requires Rust 1.31 or later.
Maps added to the ChainMap
earlier have precedence over those added
later. So the first map added to the chain will have the highest
precedence, while the most recent map added will have the lowest.
Each read of the ChainMap
will read the chain of maps in order, so each
operation will complete in worst-case O(N), with N
the number of maps in
the chain. As a result, this should only be used for cases where the number
of reads is low compared to the number of elements in each map.
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"));
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.