如何在没有循环的情况下计算具有某个值的向量中的元素?

dan*_*ani 6 rust

如何在不使用循环(如下所示)的情况下[91, 55, 77, 91]计算具有特定值(例如91)的向量(例如)中的元素?

fn count_eq(vec: &Vec<i64>, num: i64) -> i64 {
    let mut counter = 0;
    for i in vec {
        if *i == num {
            counter += 1;
        }
    }
    return counter;
}

fn main() {
    let v = vec![91, 55, 77, 91];
    println!("count 91: {}", count_eq(&v, 91));
}
Run Code Online (Sandbox Code Playgroud)

lje*_*drz 11

你可以使用它Iterator::filter然后count:

fn main() {
    let v = vec![91, 55, 77, 91];
    println!("count 91: {}", v.iter().filter(|&n| *n == 91).count());
}
Run Code Online (Sandbox Code Playgroud)

  • @RafałCieślak FWIW 我做了同样的事情,发现性能几乎没有区别。`count` 有一个特殊情况的实现来允许这样做:https://doc.rust-lang.org/1.48.0/src/core/iter/adapters/mod.rs.html#1099-1118 所以我不知道我不知道你的基准的具体情况,但我倾向于说它是有缺陷的。 (5认同)