如何将collect()的结果限制为一定数量的项目?

Phi*_*wig 4 rust

考虑以下:

fn main() {
    let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    let even = input.iter().filter(|&x| x % 2 == 0).collect::<Vec<&i32>>();

    for x in &even {
        println!("{}", x);
    }
}
Run Code Online (Sandbox Code Playgroud)

此输出2 4 6 8 10(如预期)。但是,如果我只想要前 3 项怎么办?是否有可能以某种方式限制返回值collect,而不需要先收集所有东西,然后扔掉一些物品?

swi*_*ard 7

你可以使用Iterator::take

fn main() {
    let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    let even = input
        .iter()
        .filter(|&x| x % 2 == 0)
        .take(3)
        .collect::<Vec<&i32>>();

    for x in &even {
        println!("{}", x);
    }
}
Run Code Online (Sandbox Code Playgroud)