微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HashMap<_, HashSet<_>> 的递归实现扩展,其中集合组合,而不是覆盖?

如何解决HashMap<_, HashSet<_>> 的递归实现扩展,其中集合组合,而不是覆盖?

我正在尝试将我的代码调整为 a solution to my previous question。基本上,我有一个 HashMap<String,HashSet<String>> 应该由人造丝的 par_extend 生成。问题是键重复,在这种情况下,我希望 HashSet 被组合,而不是被覆盖。换句话说,有没有办法在这里添加一个自定义impl Extend,以便下面的代码正确执行?

use std::collections::{HashMap,HashSet};

fn main() {
    let mut d: HashMap<String,HashSet<String>> = HashMap::new();

    d.extend(vec![1,2].iter().map(|x| {
        let mut z = HashSet::new();
        z.insert(x.to_string());
        return ("a".into(),z);
    }));

    assert_eq!(d.get("a").unwrap().len(),2);
}

解决方法

因为 orphan rules,你不能。但是,您可以定义一个廉价的包装器,为该包装器实现 https://maven.fabric.io/public,进行扩展,然后再次解开原始地图。也许是这样的:

Extend

Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。