首页 > 解决方案 > 如何删除 Rust 中另一个向量中出现的向量元素?

问题描述

我想要不相交的结果。这是我能想到的最好的:

for rem in &remove_vec {
    orig_vec.retain(|i| !i.eq(rem));
}

标签: rust

解决方案


您为这项工作使用了错误的工具。相反,将要删除的项目转换为一个集合,BTreeSet或者HashSet

use std::{collections::BTreeSet, iter::FromIterator};

fn demo<T>(mut items: Vec<T>, to_remove: Vec<T>) -> Vec<T>
where
    T: std::cmp::Ord,
{
    let to_remove = BTreeSet::from_iter(to_remove);

    items.retain(|e| !to_remove.contains(e));

    items
}

推荐阅读