2017-09-02 48 views
2

考虑以下几点:collect()的结果如何限制在一定数量的项目中?

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(如预期)。但是,如果我只想要前三项呢?是否有可能以某种方式限制collect的返回值,而不先收集所有东西,然后丢掉一些项目?

回答

4

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

完美,这正是我一直在寻找。谢谢! –

相关问题