Учебники

Ржавчина — ломтики

Срез — это указатель на блок памяти. Срезы могут использоваться для доступа к частям данных, хранящимся в смежных блоках памяти. Его можно использовать со структурами данных, такими как массивы, векторы и строки. Срезы используют индексные номера для доступа к частям данных. Размер среза определяется во время выполнения.

Ломтики — это указатели на фактические данные. Они передаются по ссылке на функции, которые также известны как заимствование.

Например, срезы могут использоваться для извлечения части строкового значения. Нарезанная строка — это указатель на фактический строковый объект. Поэтому нам нужно указать начальный и конечный индекс строки. Индекс начинается с 0, как массивы.

Синтаксис

let sliced_value = &data_structure[start_index..end_index]

Минимальное значение индекса равно 0, а максимальное значение индекса — это размер структуры данных. Обратите внимание, что end_index не будет включен в окончательную строку.

На приведенной ниже схеме показан пример строки учебников , которая состоит из 9 символов. Индекс первого символа равен 0, а индекс последнего символа — 8.

Учебные пособия по струнам

Следующий код выбирает 5 символов из строки (начиная с индекса 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);
}

Выход

length of string is 9
rials

Иллюстрация — Нарезка целочисленного массива

Функция main () объявляет массив из 5 элементов. Он вызывает функцию use_slice () и передает ей фрагмент из трех элементов (указывает на массив данных). Срезы передаются по ссылке. Функция use_slice () печатает значение среза и его длину.

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

Выход

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

Изменчивые ломтики

Ключевое слово & mut может использоваться для пометки фрагмента как изменяемого.

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
}

Выход

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

Приведенный выше код передает изменяемый фрагмент функции use_slice () . Функция изменяет второй элемент исходного массива.