Quelle est la manière la plus efficace d'implémenter le masquage booléen avec des vecteurs en Rust ?
Il pourrait y avoir une crate qui fait cela(?), mais pour m'aider à apprendre, j'aimerais aussi entendre parler de :
- comment vous le feriez sans une crate (c'est-à-dire ai-je manqué quelque chose dans la bibliothèque standard ?), et;
- si le masquage booléen peut être étendu aux listes et aux itérateurs de manière plus générale.
Mon exemple ci-dessous applique le vecteur booléen [true, false, false, true] pour masquer les indices true d'un vecteur u32 [1, 2, 3, 4]. Cela renvoie [2, 3].
J'utilise une boucle for maladroite; pouvons-nous le faire mieux en utilisant par exemple des maps et des itérateurs ?
fn main() {
let mut numbers = vec![1, 2, 3, 4];
let mask = vec![true, false, false, true];
remove_true(&mut numbers, &mask); // remove numbers where vector mask == true
println!("{:?}", numbers)
}
// Utilisation d'une boucle for
fn remove_true(vec: &mut Vec, locs: &Vec) {
for m in (0..locs.len()).rev() {
// Boucle en sens inverse pour préserver les indices lors de la suppression des valeurs
if locs[m] == true {
vec.remove(m);
}
}
}