Pas - Dilimler

Bir dilim, bir bellek bloğuna bir göstericidir. Dilimler, bitişik bellek bloklarında depolanan veri bölümlerine erişmek için kullanılabilir. Diziler, vektörler ve dizeler gibi veri yapıları ile kullanılabilir. Dilimler, veri bölümlerine erişmek için dizin numaralarını kullanır. Bir dilimin boyutu çalışma zamanında belirlenir.

Dilimler, gerçek verilere işaret eder. Ödünç alma olarak da bilinen işlevlere referansla aktarılırlar.

Örneğin, bir dize değerinin bir kısmını almak için dilimler kullanılabilir. Dilimlenmiş bir dize, gerçek dize nesnesine bir göstericidir. Bu nedenle, bir String'in başlangıç ​​ve bitiş indeksini belirlememiz gerekir. Dizin, diziler gibi 0'dan başlar.

Sözdizimi

let sliced_value = &data_structure[start_index..end_index]

Minimum indeks değeri 0'dır ve maksimum indeks değeri, veri yapısının boyutudur. Bitiş dizisinin son dizeye dahil edilmeyeceğini UNUTMAYIN.

Aşağıdaki şema , 9 karakter içeren örnek bir Öğretici dizesini göstermektedir . İlk karakterin indeksi 0 ve son karakterin indeksi 8'dir.

Aşağıdaki kod dizeden 5 karakter alır (dizin 4'ten başlayarak).

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

Çıktı

length of string is 9
rials

Çizim - Bir tamsayı dizisini dilimleme

Main () işlevi 5 öğeli bir dizi bildirir. Çağırıruse_slice()işlev ve ona üç öğeden oluşan bir dilim iletir (veri dizisini gösterir). Dilimler referans olarak aktarılır. Use_slice () işlevi, dilimin değerini ve uzunluğunu yazdırır.

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

Çıktı

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

Değişken Dilimler

&mut anahtar kelime, bir dilimi değiştirilebilir olarak işaretlemek için kullanılabilir.

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
}

Çıktı

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

Yukarıdaki kod, değiştirilebilir bir dilimi use_slice () işlevine iletir . Fonksiyon, orijinal dizinin ikinci elemanını değiştirir.