Rust Notes #3: Slice Type

Author

Thâm / December 31, 2024

3 min read––– lượt xem

Trong Rust, slice là một loại dữ liệu cho phép bạn tham chiếu đến một phần liên tục của một tập hợp các phần tử, chẳng hạn như một mảng hoặc một chuỗi. Slice không sở hữu dữ liệu mà chỉ cung cấp quyền truy cập vào một đoạn của dữ liệu đó, giúp thao tác với các phần của dữ liệu một cách hiệu quả mà không cần sao chép.

Slice của mảng

Giả sử bạn có một mảng:

let a = [1, 2, 3, 4, 5];

Bạn có thể tạo một slice để tham chiếu đến các phần tử từ chỉ số 1 đến 3 (không bao gồm 3):

let slice = &a[1..3];

Ở đây, slice sẽ chứa các phần tử [2, 3].

Slice của chuỗi

Với chuỗi, slice cho phép bạn tham chiếu đến một phần của chuỗi dưới dạng &str:

let s = String::from("hello world");
let hello = &s[0..5];
let world = &s[6..11];

Trong ví dụ này, hello sẽ là "hello"world sẽ là "world".

Lưu ý về chỉ số

Khi làm việc với slice của chuỗi, cần cẩn thận với các ký tự Unicode. Nếu bạn cắt chuỗi không đúng biên giới ký tự, chương trình có thể gặp lỗi. Ví dụ, với chuỗi chứa ký tự tiếng Việt:

let s = "xin chào";
let slice = &s[0..3]; // Có thể gây lỗi nếu cắt giữa ký tự Unicode

Để tránh lỗi, hãy đảm bảo chỉ số bắt đầu và kết thúc nằm trên biên giới ký tự hợp lệ.

Sử dụng slice trong hàm

Slice rất hữu ích khi bạn muốn truyền một phần của mảng hoặc chuỗi vào hàm mà không cần chuyển quyền sở hữu:

fn print_slice(slice: &[i32]) {
    for item in slice {
        println!("{}", item);
    }
}

let a = [1, 2, 3, 4, 5];
print_slice(&a[1..4]); // In ra 2, 3, 4

Trong ví dụ này, hàm print_slice nhận một tham chiếu đến slice của mảng các số nguyên và in ra các phần tử trong slice đó.

Kết luận

Slice là một tính năng mạnh mẽ trong Rust, cho phép bạn làm việc với các phần của dữ liệu một cách hiệu quả và an toàn. Bằng cách sử dụng slice, bạn có thể tránh việc sao chép dữ liệu không cần thiết và tận dụng tối đa hiệu suất của chương trình.

Đăng ký nhận thông báo qua email khi có bài viết mới

0 người đăng ký