#structures #key #pub-sub #fusion #side #insert

many-to-many

Rust 包用于创建具有查询任一端的能力的多对多数据结构,适用于pubsub等应用。类似于bimapmultimap的结合。

8个版本

0.1.7 2020年12月2日
0.1.6 2020年12月2日
0.1.5 2020年10月18日
0.1.3 2020年9月28日
0.1.2 2020年8月29日

#1778数据结构

每月22次下载
用于 hive_pubsub

MIT 许可证

14KB
211

多对多

这是一个非常简单的包,您可以使用它来在Rust中创建多对多数据结构,它的主要目的或用例是用于需要将一组id映射到另一组id的情况(例如在pubsub中,如这个包设计所针对的hive_pubsub)。它通过使用两个HashMap来实现,一个将Left链接到一组Right,反之亦然。

这个包类似于bimapmultimap的结合。我在crates.io或任何其他地方都没有看到类似的东西,所以我创建了自己的东西。

任一端(左或右)的键必须实现Hash、Eq和Clone。请参阅文档以获取更多信息。

示例

use many_to_many::ManyToMany;

let mut map = ManyToMany::new();
map.insert(1, 2);
map.insert(1, 3);
map.insert(1, 4);

assert_eq_sorted(map.get_left(&1), vec![ 2, 3, 4 ]);

map.insert(5, 2);
map.remove(&1, &4);

assert_eq_sorted(map.get_left(&1), vec![ 2, 3 ]);
assert_eq_sorted(map.get_right(&2), vec![ 1, 5 ]);

map.remove(&1, &2);
map.remove(&1, &3);

assert_eq!(map.get_left(&1), None);

map.insert(11, 10);
map.insert(12, 10);
map.insert(13, 10);
map.remove_right(&10);

assert_eq!(map.get_left(&11), None);
assert_eq!(map.get_right(&10), None);

/// This is a helper function to unwrap the option,
/// sort the array and compare it with a sorted array.
fn assert_eq_sorted(a: Option<Vec<i32>>, b: Vec<i32>) {
    assert!(a.is_some());
    let mut list = a.unwrap();
    list.sort();
    assert_eq!(list, b);
}

Serde支持

此包具有可选的Serde支持。要启用它,请在Cargo.toml中指定serde功能。例如

[dependencies]
many-to-many = { version = "^0.1.7", features = ["serde"] }

依赖项

~0–270KB