let vec = iter::repeat("ne satisfait pas la condition 1") // itérateur tel que next() ne satisfait toujours pas la condition 1
.take_while(|_| {
satisfaire_condition1.satisfaire() // vrai si la condition 1 est satisfaite sinon faux
})
.collect();
Ce code crée un vecteur de n
éléments avec n
égal au nombre de fois où la condition 1 n'est pas respectée.
J'aimerais maintenant créer un vecteur de n + m
éléments avec n
égal au nombre de fois où la condition 1 n'est pas respectée et m
le nombre de fois où la condition 2 n'est pas respectée.
Le code devrait ressembler à ceci :
let vec = iter::repeat("ne satisfait pas la condition 1")
.take_while(|_| {
satisfaire_condition1.satisfaire()
})
.union(
iter::repeat("a satisfait la condition 1 mais pas encore la 2")
.take_while(|_| {
satisfaire_condition2.satisfaire()
})
)
.collect();
Je sais que je pourrais créer deux vecteurs et les concaténer mais c'est moins efficace.
Vous pouvez utiliser ce code pour comprendre ce que fait la fonction repeat :
use std::iter;
fn main() {
let mut c = 0;
let z: Vec<_> = iter::repeat("ne satisfait pas la condition 1")
.take_while(|_| {
c = c + 1;
let rep = if c < 5 { true } else { false };
rep
})
.collect();
println!("------{:?}", z);
}