Rouille - Tranches

Une tranche est un pointeur vers un bloc de mémoire. Les tranches peuvent être utilisées pour accéder à des parties de données stockées dans des blocs de mémoire contigus. Il peut être utilisé avec des structures de données telles que des tableaux, des vecteurs et des chaînes. Les tranches utilisent des numéros d'index pour accéder à des portions de données. La taille d'une tranche est déterminée au moment de l'exécution.

Les tranches sont des pointeurs vers les données réelles. Ils sont transmis par référence à des fonctions, également appelées emprunt.

Par exemple, les tranches peuvent être utilisées pour récupérer une partie d'une valeur de chaîne. Une chaîne tranchée est un pointeur vers l'objet chaîne réel. Par conséquent, nous devons spécifier l'index de début et de fin d'une chaîne. L'index commence à 0 comme les tableaux.

Syntaxe

let sliced_value = &data_structure[start_index..end_index]

La valeur d'index minimale est 0 et la valeur d'index maximale est la taille de la structure de données. Notez que end_index ne sera pas inclus dans la chaîne finale.

Le diagramme ci-dessous montre un exemple de didacticiels de chaîne , qui comporte 9 caractères. L'index du premier caractère est 0 et celui du dernier caractère est 8.

Le code suivant récupère 5 caractères de la chaîne (à partir de l'index 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);
}

Production

length of string is 9
rials

Illustration - Découpage d'un tableau d'entiers

La fonction main () déclare un tableau avec 5 éléments. Il invoque leuse_slice()et lui transmet une tranche de trois éléments (pointe vers le tableau de données). Les tranches sont passées par référence. La fonction use_slice () imprime la valeur de la tranche et sa longueur.

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

Production

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

Tranches mutables

le &mut Le mot-clé peut être utilisé pour marquer une tranche comme mutable.

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
}

Production

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

Le code ci-dessus passe une tranche mutable à la fonction use_slice () . La fonction modifie le deuxième élément du tableau d'origine.