如何使用 Rust 求两个数组的交集、差集、并集和补集

在对数组进行操作时,我们通常遇到对两个数组求交集、差集、并集和补集的情况,这次我们使用 Rust 实现:

fn main() {
    let a = vec![(2, "aa"), (4, "c"), (3, "cc")];
    let b = vec![(3, "cc"), (5, "ee"), (2, "aa")];

    // 取交集
    let intersect = a.iter().filter(|&u| b.contains(u)).collect::<Vec<_>>();
    println!("a 和 b 交集是:{:?}", intersect);

    // 取差集
    let minusion = a.iter().filter(|&u| !b.contains(u)).collect::<Vec<_>>();
    println!("a 和 b 差集是:{:?}", minusion);

    // 取并集
    let union = a
        .iter()
        .filter(|&u| !b.contains(u))
        .chain(&b)
        .collect::<Vec<_>>();
    println!("a 和 b 并集是:{:?}", union);

    // 取补集
    let complement = a
        .iter()
        .filter(|&u| !b.contains(u))
        .chain(b.iter().filter(|&u| !a.contains(u)))
        .collect::<Vec<_>>();
    println!("a 和 b 补集是:{:?}", complement);
}

运行结果:

   Compiling study v0.1.0 (D:\Workplaces\Rust\study)
    Finished dev [unoptimized + debuginfo] target(s) in 0.82s
     Running `target\debug\study.exe`
a 和 b 交集是:[(2, "aa"), (3, "cc")]
a 和 b 差集是:[(4, "c")]
a 和 b 并集是:[(4, "c"), (3, "cc"), (5, "ee"), (2, "aa")]
a 和 b 补集是:[(4, "c"), (5, "ee")]
posted @ 2022-02-25 15:35  Rustln  阅读(917)  评论(0)    收藏  举报