Existe uma maneira de obter cada elemento n * i de um vetor?

Jan 05 2021

Existe alguma maneira inteligente de obter todos os n * ielementos de um vetor? Eu tenho este vetor:

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

Eu quero cada terceiro valor desse vetor, então a saída será:

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

Eu sei que posso conseguir isso com um loop 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());
    }
}

Respostas

1 kmdreko Jan 05 2021 at 04:07

Para iterar sobre todos os n º elemento, uso .step_by(). No entanto, usando isso começa no valor inicial, você também precisará encadear .skip(). playground :

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]

Veja também:

  • Iterador que retorna cada enésimo valor
  • Como iterar a cada segundo número