Óxido - Rebanadas

Un segmento es un puntero a un bloque de memoria. Las secciones se pueden utilizar para acceder a porciones de datos almacenados en bloques de memoria contiguos. Se puede utilizar con estructuras de datos como matrices, vectores y cadenas. Los sectores utilizan números de índice para acceder a porciones de datos. El tamaño de un segmento se determina en tiempo de ejecución.

Los cortes son indicadores de los datos reales. Se pasan por referencia a funciones, lo que también se conoce como préstamo.

Por ejemplo, los sectores se pueden utilizar para recuperar una parte de un valor de cadena. Una cadena cortada es un puntero al objeto de cadena real. Por lo tanto, necesitamos especificar el índice inicial y final de una cadena. El índice comienza desde 0 al igual que las matrices.

Sintaxis

let sliced_value = &data_structure[start_index..end_index]

El valor de índice mínimo es 0 y el valor de índice máximo es el tamaño de la estructura de datos. TENGA EN CUENTA que end_index no se incluirá en la cadena final.

El siguiente diagrama muestra un ejemplo de Tutoriales de cadenas , que tiene 9 caracteres. El índice del primer carácter es 0 y el del último carácter es 8.

El siguiente código obtiene 5 caracteres de la cadena (comenzando desde el índice 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);
}

Salida

length of string is 9
rials

Ilustración - Cortar una matriz de enteros

La función main () declara una matriz con 5 elementos. Invoca eluse_slice()función y le pasa una porción de tres elementos (apunta a la matriz de datos). Los cortes se pasan por referencia. La función use_slice () imprime el valor del corte y su longitud.

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

Salida

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

Rebanadas mutables

los &mut La palabra clave se puede utilizar para marcar un segmento como 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
}

Salida

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

El código anterior pasa un segmento mutable a la función use_slice () . La función modifica el segundo elemento de la matriz original.