Gibt es eine Möglichkeit, jedes n * i-Element eines Vektors zu erhalten?

Jan 05 2021

Gibt es eine clevere Möglichkeit, jedes n * iElement eines Vektors zu erhalten? Ich habe diesen Vektor:

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

Ich möchte jeden dritten Wert dieses Vektors, daher lautet die Ausgabe:

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

Ich weiß, dass ich dies mit einer for-Schleife erreichen kann:

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());
    }
}

Antworten

1 kmdreko Jan 05 2021 at 04:07

Verwenden Sie, um jedes n- te Element zu durchlaufen .step_by(). Wenn Sie dies jedoch ab dem Anfangswert verwenden, müssen Sie auch verketten .skip(). Spielplatz :

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]

Siehe auch:

  • Iterator, der jeden N-ten Wert zurückgibt
  • Wie man über jede zweite Zahl iteriert