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

标签 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);
    }
}

这会输出 2 4 6 8 10(如预期)。但是,如果我只想要前 3 项怎么办?是否可以以某种方式限制 collect 的返回值,而不是先收集所有内容然后再丢弃一些项目?

最佳答案

你可以使用 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);
    }
}

关于rust - 如何将 collect() 的结果限制为一定数量的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46017779/

相关文章:

for-loop - 在循环 block 外使用 enumerate 的索引

rust - "method exists but trait bounds not satisfied"是什么意思?

generics - 如何使用 num::Integer 类型的数字文字?

pointers - 堆对象的堆栈引用

enums - 为什么不能在匹配武器中推断出枚举变体?

rust - 如何重用二进制搜索树,红黑树和AVL树的代码?

generics - 如何判断 Rust 无法推断出哪种泛型类型?

rust - 如何在 Rust 中对数组、切片或 Vec 中的值求和?

rust - 先前迭代中的可变借用,或者可能是终生问题?

visual-studio-code - 在Rust和VSCode的新行中继续Docstring