Existe-t-il un moyen d'obtenir chaque élément n * i d'un vecteur?

Jan 05 2021

Existe-t-il un moyen intelligent d'obtenir chaque n * iélément d'un vecteur? J'ai ce vecteur:

let example = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];

Je veux une valeur sur trois de ce vecteur, donc la sortie sera:

let result = vec![3, 6, 9];

Je sais que je peux y parvenir avec une boucle for:

let mut result: Vec<i32> = vec![];
let offset = 3;
for (index, value) in example.iter().enumerate() {
    if (index + 1) % offset == 0 {
        result.push(value.clone());
    }
}

Réponses

1 kmdreko Jan 05 2021 at 04:07

Pour parcourir chaque n ième élément, utilisez .step_by(). Cependant, en utilisant cela commence à la valeur initiale, vous devrez également enchaîner .skip(). aire de jeux :

let example = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
let n = 3;
let result: Vec<_> = example.iter().skip(n-1).step_by(n).copied().collect();
println!("{:?}", result);
[3, 6, 9]

Voir également:

  • Itérateur qui renvoie chaque Nième valeur
  • Comment parcourir un nombre sur deux