rust - 如何将一个 HashSet 的所有值插入另一个 HashSet?

标签 rust union hashset

我有两个 HashSet<u16> s,我想实现 a = a U b .如果可能的话,我想使用 HashSet::union而不是循环或其他调整。

我尝试了以下方法:

use std::collections::HashSet;
let mut a: HashSet<u16> = [1, 2, 3].iter().cloned().collect();
let b: HashSet<u16> = [7, 8, 9].iter().cloned().collect();  

// I can build a union object that contains &u16
let union: HashSet<&u16> = a.union(&b).collect();

// But I can't store the union into a
a = a.union(&b).collect();   //  -> compile error

// of course I can do
for x in &b {
    a.insert(*x);
}
// but I wonder if union could not be used to simply build a union

错误信息如下:

the trait bound 
`std::collections::HashSet<u16>: std::iter::FromIterator<&u16>`
is not satisfied

我如何执行 a = a U b

最佳答案

您不需要 union — 如您所说,它将创建一个新的 HashSet。相反,您可以使用 Extend::extend :

use std::collections::HashSet;

fn main() {
    let mut a: HashSet<u16> = [1, 2, 3].iter().copied().collect();
    let b: HashSet<u16> = [1, 3, 7, 8, 9].iter().copied().collect();

    a.extend(&b);

    println!("{:?}", a); // {8, 3, 2, 1, 7, 9}
}

( Playground )

Extend::extend 也是 implemented for other collections ,例如向量Vec 的结果会有所不同,因为 Vec 不像 Set 那样接受重复项。

关于rust - 如何将一个 HashSet 的所有值插入另一个 HashSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56148586/

相关文章:

rust - 预生成大量数据的 “queue”以便立即在actix-web端点中获取它

rust - 在 Rust 中字节交换值的首选方式是什么?

mysql - 合并两个表并将结果相加

c# - 为什么我不能在没有枚举的情况下从 HashSet 中检索项目?

java.util.HashSet.Contains 测试导致结果不一致

string - 使用新的 std::fs::File 创建字符串向量

mysql - UNION查询合并两个表的结果按源表排序

jpa - 使用 JPA CriteriaBuilder 进行 Union All 和 Sum

c# - 如何将用户定义的数据类型转换为哈希集C#

rust - 为什么我需要在比较变量时取消引用变量而不是在进行算术运算时?