C'è un modo per ottenere ogni elemento n * i di un vettore?

Jan 05 2021

Esiste un modo intelligente per ottenere ogni n * ielemento di un vettore? Ho questo vettore:

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

Voglio ogni terzo valore di questo vettore, quindi l'output sarà:

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

So che posso ottenere questo risultato con un ciclo 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());
    }
}

Risposte

1 kmdreko Jan 05 2021 at 04:07

Per iterare su ogni n- esimo elemento, usa .step_by(). Tuttavia, utilizzando che inizia dal valore iniziale, dovrai anche concatenare .skip(). parco giochi :

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]

Guarda anche:

  • Iteratore che restituisce ogni ennesimo valore
  • Come eseguire l'iterazione su ogni secondo numero