Тип Slice в Rust | OTUS

Тип Slice в Rust

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

1-1801-1afd6b.png

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

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

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

2-1801-7d8852.png

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

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

3-1801-94b45f.png

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

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

4-1801-489387.png

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

5-1801-863710.png

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

6-1801-98bd95.png

String slice

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

7-1801-4f7f37.png

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

8-1801-9b3cc8.png

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

9-1801-a472ee.png

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто