Câu hỏi phỏng vấn Rust
Câu hỏi

Làm thế nào để lặp qua một phạm vi với bước tùy chỉnh trong Rust?

Câu trả lời

Để lặp qua một phạm vi với bước tùy chỉnh trong Rust, bạn có thể sử dụng phương thức step_by() từ trait Iterator. Phương thức này cho phép bạn chỉ định kích thước bước lặp. Ví dụ, nếu bạn muốn lặp từ 0 đến 10 với bước nhảy là 2, bạn có thể viết như sau:

rust Copy
for i in (0..11).step_by(2) {
    println!("{}", i);
}

Đoạn mã trên sẽ in ra các số 0, 2, 4, 6, 8, 10[1][4][5].

Nếu bạn muốn lặp qua một phạm vi với bước nhảy không đều, ví dụ như nhân đôi giá trị sau mỗi lần lặp, bạn có thể tạo một iterator tùy chỉnh. Một cách để làm điều này là sử dụng struct MulStep và trait StepByMulExtender như trong ví dụ dưới đây:

rust Copy
use std::ops::{Mul, Range};

struct MulStep<T> {
    step: T,
    pos: T,
    end: T,
}

impl<T> Iterator for MulStep<T>
where
    T: Copy + Ord + Mul<T, Output = T>,
{
    type Item = T;

    fn next(&mut self) -> Option<Self::Item> {
        if self.pos < self.end {
            let result = self.pos;
            self.pos = self.pos * self.step;
            Some(result)
        } else {
            None
        }
    }
}

trait StepByMulExtender<T> {
...
junior

junior

Gợi ý câu hỏi phỏng vấn

middle

Định nghĩa một extension trait cho phép định dạng bất kỳ iterable nào của các kiểu có thể hiển thị trong một định dạng tùy chỉnh trong Rust

junior

Closure trong Rust là gì?

middle

Kiểu String trong Rust có phải là Copy hay Clone?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào