You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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实现了Copy trait,此处也可替换为.copied()
  • .collect()借助BTreeSet实现的FromIterator trait,将迭代器元素整合为新的自有BTreeSet

如果处理未实现Copy的自定义类型,只要类型实现了Clone,可通过以下方式处理:

// 假设自定义类型T实现了Clone
s1.intersection(&s2).map(|item| item.clone()).collect()

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:14:55