0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>В языке программирования Rust существует тип Slice, представляющий часть набора элементов. Это может быть, к примеру, часть массива. Формальное определение slice выглядит следующим образом:</p>
1
<p>В языке программирования Rust существует тип Slice, представляющий часть набора элементов. Это может быть, к примеру, часть массива. Формальное определение slice выглядит следующим образом:</p>
2
<p>Чтобы извлечь набор элементов, применяют синтаксис последовательностей -- это оператор .., слева от которого указывают начальный индекс, ну а справа указывают конечный индекс.</p>
2
<p>Чтобы извлечь набор элементов, применяют синтаксис последовательностей -- это оператор .., слева от которого указывают начальный индекс, ну а справа указывают конечный индекс.</p>
3
<p>Также слайс определяется в качестве ссылки, следовательно, он, по сути, не владеет полученным поднабором элементов, а всего лишь содержит ссылку на данный поднабор.</p>
3
<p>Также слайс определяется в качестве ссылки, следовательно, он, по сути, не владеет полученным поднабором элементов, а всего лишь содержит ссылку на данный поднабор.</p>
4
<p>Давайте определим slice, представляющий часть массива:</p>
4
<p>Давайте определим slice, представляющий часть массива:</p>
5
<p>В нашем примере выражение numbers[1..5] указывает, что мы желаем забрать из массива элементы, начиная с первого индекса по пятый, а т. к. индексация в массиве начинается с 0, а конечный индекс не включается в результат, то из массива [1, 2, 3, 4, 5, 6, 7, 8] у нас получится подмассив [2, 3, 4, 5].</p>
5
<p>В нашем примере выражение numbers[1..5] указывает, что мы желаем забрать из массива элементы, начиная с первого индекса по пятый, а т. к. индексация в массиве начинается с 0, а конечный индекс не включается в результат, то из массива [1, 2, 3, 4, 5, 6, 7, 8] у нас получится подмассив [2, 3, 4, 5].</p>
6
<p>После того как слайс инициализирован, мы можем обращаться к его элементам. К примеру, как обращаемся в массиве по индексу:</p>
6
<p>После того как слайс инициализирован, мы можем обращаться к его элементам. К примеру, как обращаемся в массиве по индексу:</p>
7
<p>Кроме того, у нас есть возможность перебрать элементы в цикле for.</p>
7
<p>Кроме того, у нас есть возможность перебрать элементы в цикле for.</p>
8
<p>Смотрим консольный вывод программы:</p>
8
<p>Смотрим консольный вывод программы:</p>
9
<p>В том случае, если нужно взять элементы, начиная с нулевого индекса, индекс можно просто не указывать. Кроме того, вы можете не указывать и конечный индекс -- тогда получится взять элементы до самого последнего. Следовательно, есть возможность применять такие комбинации:</p>
9
<p>В том случае, если нужно взять элементы, начиная с нулевого индекса, индекс можно просто не указывать. Кроме того, вы можете не указывать и конечный индекс -- тогда получится взять элементы до самого последнего. Следовательно, есть возможность применять такие комбинации:</p>
10
<p>Еще посредством слайса вы сможете менять элементы поднабора (и, соответственно, начального набора). В данной ситуации slice надо определить как изменяемую ссылку с оператором<strong>&mut</strong>:</p>
10
<p>Еще посредством слайса вы сможете менять элементы поднабора (и, соответственно, начального набора). В данной ситуации slice надо определить как изменяемую ссылку с оператором<strong>&mut</strong>:</p>
11
<h2>String slice</h2>
11
<h2>String slice</h2>
12
<p>Точно таким же образом вы сможете получить поднабор и из прочих наборов элементов, к примеру, из строки, то есть из типа String:</p>
12
<p>Точно таким же образом вы сможете получить поднабор и из прочих наборов элементов, к примеру, из строки, то есть из типа String:</p>
13
<p>Важно отметить, что для представления строкового слайса в языке программирования Rust существует специальный тип --<strong>&str</strong>. То есть можно написать так:</p>
13
<p>Важно отметить, что для представления строкового слайса в языке программирования Rust существует специальный тип --<strong>&str</strong>. То есть можно написать так:</p>
14
<p>В тот момент, когда обычной строке присваивалась переменная hello, по факту эта переменная представляла строковый слайс либо тип<strong>&str</strong>.</p>
14
<p>В тот момент, когда обычной строке присваивалась переменная hello, по факту эта переменная представляла строковый слайс либо тип<strong>&str</strong>.</p>
15
<p><em>По материалам https://metanit.com/rust/.</em></p>
15
<p><em>По материалам https://metanit.com/rust/.</em></p>
16
16