Тип Slice в Rust

В языке программирования Rust существует тип Slice, представляющий часть набора элементов. Это может быть, к примеру, часть массива. Формальное определение slice выглядит следующим образом:

Чтобы извлечь набор элементов, применяют синтаксис последовательностей -- это оператор .., слева от которого указывают начальный индекс, ну а справа указывают конечный индекс.

Также слайс определяется в качестве ссылки, следовательно, он, по сути, не владеет полученным поднабором элементов, а всего лишь содержит ссылку на данный поднабор.

Давайте определим slice, представляющий часть массива:

В нашем примере выражение numbers[1..5] указывает, что мы желаем забрать из массива элементы, начиная с первого индекса по пятый, а т. к. индексация в массиве начинается с 0, а конечный индекс не включается в результат, то из массива [1, 2, 3, 4, 5, 6, 7, 8] у нас получится подмассив [2, 3, 4, 5].

После того как слайс инициализирован, мы можем обращаться к его элементам. К примеру, как обращаемся в массиве по индексу:

Кроме того, у нас есть возможность перебрать элементы в цикле for.

Смотрим консольный вывод программы:

В том случае, если нужно взять элементы, начиная с нулевого индекса, индекс можно просто не указывать. Кроме того, вы можете не указывать и конечный индекс -- тогда получится взять элементы до самого последнего. Следовательно, есть возможность применять такие комбинации:

Еще посредством слайса вы сможете менять элементы поднабора (и, соответственно, начального набора). В данной ситуации slice надо определить как изменяемую ссылку с оператором &mut:

String slice

Точно таким же образом вы сможете получить поднабор и из прочих наборов элементов, к примеру, из строки, то есть из типа String:

Важно отметить, что для представления строкового слайса в языке программирования Rust существует специальный тип -- &str. То есть можно написать так:

В тот момент, когда обычной строке присваивалась переменная hello, по факту эта переменная представляла строковый слайс либо тип &str.

По материалам https://metanit.com/rust/.