#structure #together #members #object #combine #set-map

amalgamator

一种类似集合/映射的数据结构,允许您将成员组合在一起

1 个不稳定版本

0.1.0 2024年7月25日

#593数据结构

Download history 89/week @ 2024-07-20 37/week @ 2024-07-27

每月下载量126

MIT/Apache

27KB
579

amalgamator

描述

amalgamator 是一种类似集合/映射的数据结构,允许您根据某些标准将集合/映射的成员组合在一起

当您想要合并不严格相等但相似到足以视为同一对象的元素时,此功能非常有用。

安装

cargo add amalgamator

序列化支持

如果您想使用 serde 支持功能,可以启用 serde 特性。

cargo add amalgamator --features serde

文档

查看docs.rs上的文档页面。

许可证

此项目采用MIT/Apache许可证,您可选择其中之一。


lib.rs:

amalgamator 是一种类似集合/映射的数据结构,允许您根据某些标准将集合/映射的成员组合在一起。当您想要合并不严格相等但相似到足以视为同一对象的元素时,此功能非常有用。

这可以在多种情况下使用,例如

  • 合并来自多个来源的数据
  • 实体去重
  • 数据标准化

Amalgamator是一种类似于集合/映射的数据结构,它使用用户定义的函数来决定哪些元素应该被合并,以及如何合并这些元素。这是通过Amalgamate 特性实现的。

首先,让我们看看如何实现 Amalgamate 特性

use amalgamator::Amalgamate;
use std::collections::HashSet;

struct Person {
    name: String,
    friends: HashSet<String>,
}

impl Amalgamate for Person {
    type Key = String;

    fn key(&self) -> Self::Key {
        self.name.clone()
    }

    fn amalgamate(&mut self, other: Self) {
        self.friends.extend(other.friends);
    }
}

在这个例子中,我们有一个 Person 结构体,它有一个 Person 结构体和一个 Person 结构体。我们通过定义 Key 类型为 String 并实现 keyamalgamate 函数来为 Person 实现 Amalgamate 特性。我们假设 name 字段的值对于每个 Person 是唯一的,因此我们使用它作为键来确定是否应该合并两个 Person 对象。

现在我们已经实现了 Amalgamate 特性,我们可以使用 Amalgamator 数据结构来合并 Person 对象。更好的是,我们可以像使用常规的集合/映射数据结构一样使用它。

use amalgamator::Amalgamator;
#
#
#

let mut amalgamator = Amalgamator::new();

let alice = Person {
    name: "Alice".to_string(),
    friends: ["Bob", "Charlie"].iter().map(|s| s.to_string()).collect(),
};

let bob = Person {
    name: "Bob".to_string(),
    friends: ["Alice", "Charlie"].iter().map(|s| s.to_string()).collect(),
};

let other_alice = Person {
    name: "Alice".to_string(),
    friends: ["David", "Eve"].iter().map(|s| s.to_string()).collect(),
};

amalgamator.add(alice);
amalgamator.add(bob);
amalgamator.add(other_alice);

assert_eq!(amalgamator.len(), 2);

let alice = &amalgamator["Alice"];
assert_eq!(alice.friends.len(), 4);

在这个例子中,我们创建了一个 Amalgamator 并向其中添加了三个 Person 对象。然后我们验证 Amalgamator 中只包含两个 Person 对象,因为两个具有相同名字的 Alice 对象(即相同的名字)已经被合并。然后我们从 Amalgamator 中检索 Alice 对象并验证它包含来自两个 Alice 对象的所有朋友。

特性

  • serde:使用 Serde 使 Amalgamator 能够进行序列化和反序列化。

依赖项

~175KB