2017-07-24 4 views

Répondre

10

Vous pouvez simplement utiliser itérateurs:

fn main() { 
    let v1 = (0u32..9).filter(|x| x % 2 == 0).map(|x| x.pow(2)).collect::<Vec<_>>(); 
    let v2 = (1..10).filter(|x| x % 2 == 0).collect::<Vec<u32>>(); 

    println!("{:?}", v1); // [0, 4, 16, 36, 64] 
    println!("{:?}", v2); // [2, 4, 6, 8] 
} 
+0

Connaissez-vous la complexité? Est-ce que l'appling filtre et ensuite force la carte itérative deux fois et donc double le temps de calcul? – Darkaird

+5

@Darkaird no. Les itérateurs sont paresseux et ne traitent chaque élément qu'une seule fois. – Shepmaster

10

cute est une macro pour Python -esque liste et dictionnaire (HashMap) compréhensions dans Rust.

#[macro_use(c)] 
extern crate cute; 

let vector = c![x, for x in 1..10, if x % 2 == 0]; 
+0

J'avais déjà vu ça et je l'ai trouvé vraiment intéressant mais ce que je veux c'est plus une fonction/syntaxe intégrée comme @ljedrz a répondu. – Darkaird

+1

@Darkaird rouille a une librairie STD relativement maigre donc vous ne pourriez pas aller loin sans caisses supplémentaires. – the8472