11 个不稳定版本
0.6.0 | 2023 年 8 月 23 日 |
---|---|
0.5.0 | 2020 年 9 月 10 日 |
0.4.0 | 2019 年 5 月 25 日 |
0.3.1 | 2018 年 6 月 14 日 |
0.3.0 | 2017 年 7 月 29 日 |
#1019 在 数据结构
5,502 每月下载量
用于 5 crates
46KB
950 代码行
defaultmap
在映射中无需担心缺少键可能会有用。如果请求了一个没有值的键,则简单地返回默认值。这正是此库所提供的。
示例
计数器
一个明显的用例是在计算列表中的唯一元素。这里你想在映射中为该键的现有值加一。当键尚未有值时,这是第一次添加的问题。使用此库,你可以在创建映射时指定默认值应该是零。
# use defaultmap::*;
let nums = [1, 4, 3, 3, 4, 2, 4];
let mut counts: DefaultHashMap<i32, i32> = DefaultHashMap::new(0);
// DefaultHashMap::default() is equivalent.
for num in nums.into_iter() {
counts[*num] += 1;
}
println!("{:?}", counts);
// DefaultHashMap { map: {1: 1, 3: 2, 2: 1, 4: 3}, default: 0 }
# assert_eq!(1, counts[1]);
# assert_eq!(1, counts[2]);
# assert_eq!(2, counts[3]);
# assert_eq!(3, counts[4]);
同义词列表
默认映射的另一个用法是使用填充其他集合的映射,例如一个 Vec
、一个 HashMap
或另一个默认映射。下面是一些代码,用于创建一个映射,我们以同义词组开始,以每个单词的同义词列表结束。
# use defaultmap::*;
let synonym_tuples = [
("nice", "sweet"),
("sweet", "candy"),
("nice", "entertaining"),
("nice", "good"),
("entertaining", "absorbing"),
];
let mut synonym_map: DefaultHashMap<&str, Vec<&str>> = DefaultHashMap::new(vec![]);
// DefaultHashMap::default() is equivalent.
for &(l, r) in synonym_tuples.into_iter() {
synonym_map[l].push(r);
synonym_map[r].push(l);
}
assert_eq!(synonym_map["good"], vec!["nice"]);
assert_eq!(synonym_map["nice"], vec!["sweet", "entertaining", "good"]);
assert_eq!(synonym_map["evil"], Vec::<&str>::new());
依赖项
~0.4–1MB
~22K SLoC