Ruggine - Fette

Una fetta è un puntatore a un blocco di memoria. Le slice possono essere utilizzate per accedere a porzioni di dati archiviate in blocchi di memoria contigui. Può essere utilizzato con strutture dati come array, vettori e stringhe. Le sezioni utilizzano numeri di indice per accedere a parti di dati. La dimensione di una sezione viene determinata in fase di esecuzione.

Le sezioni sono puntatori ai dati effettivi. Vengono passati in riferimento alle funzioni, note anche come prestito.

Ad esempio, le sezioni possono essere utilizzate per recuperare una parte di un valore di stringa. Una stringa tagliata è un puntatore all'oggetto stringa effettivo. Pertanto, è necessario specificare l'indice iniziale e finale di una stringa. L'indice inizia da 0 proprio come gli array.

Sintassi

let sliced_value = &data_structure[start_index..end_index]

Il valore di indice minimo è 0 e il valore di indice massimo è la dimensione della struttura dei dati. NOTA che end_index non sarà incluso nella stringa finale.

Il diagramma seguente mostra una stringa di esempio Tutorial , che ha 9 caratteri. L'indice del primo carattere è 0 e quello dell'ultimo carattere è 8.

Il codice seguente recupera 5 caratteri dalla stringa (a partire dall'indice 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);
}

Produzione

length of string is 9
rials

Illustrazione - Affettare una matrice intera

La funzione main () dichiara un array con 5 elementi. Invoca iluse_slice()e le passa una porzione di tre elementi (punta all'array di dati). Le fette vengono passate per riferimento. La funzione use_slice () stampa il valore della fetta e la sua lunghezza.

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

Produzione

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

Fette mobili

Il &mut la parola chiave può essere utilizzata per contrassegnare una sezione come modificabile.

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
}

Produzione

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

Il codice precedente passa uno slice modificabile alla funzione use_slice () . La funzione modifica il secondo elemento dell'array originale.