如何在Rust中从两个BTreeSet生成新的自有交集BTreeSet?
Rust中从两个BTreeSet的交集创建新的自有BTreeSet
你需要将intersection返回的迭代器元素收集为新的BTreeSet。由于intersection产出的是原集合元素的引用,需先将这些引用转换为自有值,再通过collect()完成类型转换,修改后的示例代码如下:
use std::collections::BTreeSet; fn test() -> BTreeSet<u64> { let mut s1 = BTreeSet::new(); let mut s2 = BTreeSet::new(); s1.insert(1u64); s2.insert(2u64); // 将交集迭代器的元素转换为自有值并收集为BTreeSet s1.intersection(&s2).cloned().collect() }
关键逻辑说明:
intersection(&s2)返回的迭代器产出&u64类型元素(原集合元素的引用).cloned()会将每个引用复制为对应自有值,因u64实现了Copytrait,此处也可替换为.copied().collect()借助BTreeSet实现的FromIteratortrait,将迭代器元素整合为新的自有BTreeSet
如果处理未实现Copy的自定义类型,只要类型实现了Clone,可通过以下方式处理:
// 假设自定义类型T实现了Clone s1.intersection(&s2).map(|item| item.clone()).collect()
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

