Gỉ - Lát

Một lát cắt là một con trỏ tới một khối bộ nhớ. Slices có thể được sử dụng để truy cập các phần dữ liệu được lưu trữ trong các khối bộ nhớ liền kề. Nó có thể được sử dụng với các cấu trúc dữ liệu như mảng, vectơ và chuỗi. Slices sử dụng số chỉ mục để truy cập các phần dữ liệu. Kích thước của một lát cắt được xác định trong thời gian chạy.

Slices là con trỏ đến dữ liệu thực tế. Chúng được chuyển bằng cách tham chiếu đến các hàm, còn được gọi là sự vay mượn.

Ví dụ, các lát cắt có thể được sử dụng để tìm nạp một phần của giá trị chuỗi. Một chuỗi được cắt lát là một con trỏ đến đối tượng chuỗi thực. Do đó, chúng ta cần xác định chỉ mục bắt đầu và kết thúc của một Chuỗi. Chỉ mục bắt đầu từ 0 giống như mảng.

Cú pháp

let sliced_value = &data_structure[start_index..end_index]

Giá trị chỉ mục tối thiểu là 0 và giá trị chỉ mục lớn nhất là kích thước của cấu trúc dữ liệu. LƯU Ý rằng end_index sẽ không được bao gồm trong chuỗi cuối cùng.

Sơ đồ dưới đây cho thấy một chuỗi mẫu Hướng dẫn , có 9 ký tự. Chỉ số của ký tự đầu tiên là 0 và của ký tự cuối cùng là 8.

Đoạn mã sau tìm nạp 5 ký tự từ chuỗi (bắt đầu từ chỉ mục 4).

fn main() {
   let n1 = "Tutorials".to_string();
   println!("length of string is {}",n1.len());
   let c1 = &n1[4..9]; 
   
   // fetches characters at 4,5,6,7, and 8 indexes
   println!("{}",c1);
}

Đầu ra

length of string is 9
rials

Hình minh họa - Cắt một mảng số nguyên

Hàm main () khai báo một mảng có 5 phần tử. Nó gọiuse_slice()và chuyển cho nó một lát gồm ba phần tử (trỏ tới mảng dữ liệu). Các lát cắt được thông qua bằng tham chiếu. Hàm use_slice () in ra giá trị của lát cắt và độ dài của nó.

fn main(){
   let data = [10,20,30,40,50];
   use_slice(&data[1..4]);
   //this is effectively borrowing elements for a while
}
fn use_slice(slice:&[i32]) { 
   // is taking a slice or borrowing a part of an array of i32s
   println!("length of slice is {:?}",slice.len());
   println!("{:?}",slice);
}

Đầu ra

length of slice is 3
[20, 30, 40]

Các lát cắt có thể thay đổi

Các &mut từ khóa có thể được sử dụng để đánh dấu một lát là có thể thay đổi.

fn main(){
   let mut data = [10,20,30,40,50];
   use_slice(&mut data[1..4]);
   // passes references of 
   20, 30 and 40
   println!("{:?}",data);
}
fn use_slice(slice:&mut [i32]) {
   println!("length of slice is {:?}",slice.len());
   println!("{:?}",slice);
   slice[0] = 1010; // replaces 20 with 1010
}

Đầu ra

length of slice is 3
[20, 30, 40]
[10, 1010, 30, 40, 50]

Đoạn mã trên chuyển một lát có thể thay đổi đến hàm use_slice () . Hàm sửa đổi phần tử thứ hai của mảng ban đầu.