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数据结构

Download history 1125/week @ 2024-04-08 1197/week @ 2024-04-15 750/week @ 2024-04-22 1437/week @ 2024-04-29 527/week @ 2024-05-06 793/week @ 2024-05-13 1174/week @ 2024-05-20 1248/week @ 2024-05-27 1489/week @ 2024-06-03 1232/week @ 2024-06-10 998/week @ 2024-06-17 1748/week @ 2024-06-24 937/week @ 2024-07-01 1375/week @ 2024-07-08 1344/week @ 2024-07-15 1688/week @ 2024-07-22

5,502 每月下载量
用于 5 crates

MIT 许可证

46KB
950 代码行

defaultmap

Build Status codecov Latest Version Rust Documentation GitHub license

在映射中无需担心缺少键可能会有用。如果请求了一个没有值的键,则简单地返回默认值。这正是此库所提供的。

示例

计数器

一个明显的用例是在计算列表中的唯一元素。这里你想在映射中为该键的现有值加一。当键尚未有值时,这是第一次添加的问题。使用此库,你可以在创建映射时指定默认值应该是零。

# 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