2016-11-10 5 views
1

При использовании filter вы получаете ссылку, потому что filter does not return ownership. Однако iter() уже ссылается на то, что вы итерация, так что вы получите код, который выглядит следующим образом:Идиоматический способ использования фильтра()

fn main() { 
    let mut vec: Vec<(bool, i32)> = Vec::new(); 
    vec.push((true, 1)); 
    vec.push((false, 2)); 
    vec.push((true, 3)); 
    for &(_, x) in vec.iter().filter(|&&(exists, _)| exists) { 
     println!("{}", x); 
    } 
} 

Это, кажется, как много & мне. Это считается идиоматическим способом реализации filter()?

ответ

4

Короче говоря, yes. Хотя в вашем конкретном примере вы можете использовать into_iter, чтобы получить итератор, который возвращает право собственности.

Смежные вопросы