มีวิธีรับทุกองค์ประกอบ n * i ของเวกเตอร์หรือไม่?

Jan 05 2021

มีวิธีใดที่ชาญฉลาดในการรับทุกn * iองค์ประกอบของเวกเตอร์? ฉันมีเวกเตอร์นี้:

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

ฉันต้องการทุกค่าที่สามของเวกเตอร์นี้ดังนั้นผลลัพธ์จะเป็น:

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

ฉันรู้ว่าฉันสามารถบรรลุสิ่งนี้ได้ด้วย for loop:

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

คำตอบ

1 kmdreko Jan 05 2021 at 04:07

ย้ำกว่าทุกn TH .step_by()องค์ประกอบการใช้งาน อย่างไรก็ตามการใช้เริ่มต้นที่ค่าเริ่มต้นคุณจะต้องเชื่อมโยง.skip()ด้วย สนามเด็กเล่น :

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]

ดูสิ่งนี้ด้วย:

  • Iterator ที่คืนค่า Nth แต่ละค่า
  • วิธีการวนซ้ำทุก ๆ วินาที