Có cách nào để lấy mọi phần tử n * i của vectơ không?

Jan 05 2021

Có cách nào thông minh để lấy mọi n * iphần tử của vectơ không? Tôi có vectơ này:

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

Tôi muốn mọi giá trị thứ ba của vectơ này, vì vậy đầu ra sẽ là:

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

Tôi biết rằng tôi có thể đạt được điều này với vòng lặp 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());
    }
}

Trả lời

1 kmdreko Jan 05 2021 at 04:07

Để lặp lại mọi phần tử thứ n , hãy sử dụng .step_by(). Tuy nhiên, việc sử dụng giá trị đó bắt đầu từ giá trị ban đầu, bạn cũng cần phải chuỗi .skip(). sân chơi :

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]

Xem thêm:

  • Trình lặp trả về mỗi giá trị thứ N
  • Cách lặp lại mỗi số thứ hai