Примитивный тип slice

Динамически изменяемое представление непрерывной последовательности [T].

Непрерывный здесь означает, что элементы расположены так, что каждый элемент находится на одинаковом расстоянии от своих соседей.

Смотрите также модуль std::slice.

Срезы (slices) представляют собой вид на блок памяти, представленный как указатель и длина.

#![allow(unused)]
fn main() {
// создание среза из Vec
let vec = vec![1, 2, 3];
let int_slice = &vec[..];
// приведение массива к срезу
let str_slice: &[&str] = &["one", "two", "three"];
}

Срезы могут быть либо изменяемыми, либо общими (разделяемыми). Общий тип среза - &[T], тогда как изменяемый тип среза - &mut [T], где T представляет тип элемента. Например, вы можете изменять блок памяти, на который указывает изменяемый срез:

#![allow(unused)]
fn main() {
let mut x = [1, 2, 3];
let x = &mut x[..]; // Берём полный срез `x`.
x[1] = 7;
assert_eq!(x, &[1, 7, 3]);
}

Можно создавать пустые поддиапазоны срезов, используя пустые диапазоны (включая slice.len()..slice.len()):

#![allow(unused)]
fn main() {
let x = [1, 2, 3];
let empty = &x[0..0];   // подсрез перед первым элементом
assert_eq!(empty, &[]);
let empty = &x[..0];    // то же, что &x[0..0]
assert_eq!(empty, &[]);
let empty = &x[1..1];   // пустой подсрез в середине
assert_eq!(empty, &[]);
let empty = &x[3..3];   // подсрез после последнего элемента
assert_eq!(empty, &[]);
let empty = &x[3..];    // то же, что &x[3..3]
assert_eq!(empty, &[]);
}

Не допускается использование поддиапазонов, которые начинаются с нижней границы, большей чем slice.len(): ⓘ

#![allow(unused)]
fn main() {
let x = vec![1, 2, 3];
let _ = &x[4..4];
}

Поскольку срезы хранят длину последовательности, на которую они ссылаются, они имеют вдвое больший размер, чем указатели на типы с известным размером (Sized types). Смотрите также справочник по динамически изменяемым типам (dynamically sized types).

#![allow(unused)]
fn main() {
let pointer_size = size_of::<&u8>();
assert_eq!(2 * pointer_size, size_of::<&[u8]>());
assert_eq!(2 * pointer_size, size_of::<*const [u8]>());
assert_eq!(2 * pointer_size, size_of::<Box<[u8]>>());
assert_eq!(2 * pointer_size, size_of::<Rc<[u8]>>());
}

Реализации трейтов

Некоторые трейты реализованы для срезов, если тип элемента реализует этот трейт. Это включает Eq, Hash и Ord.

Итерация

Срезы реализуют IntoIterator. Итератор возвращает ссылки на элементы среза.

#![allow(unused)]
fn main() {
let numbers: &[i32] = &[0, 1, 2];
for n in numbers {
    println!("{n} is a number!");
}
}

Изменяемый срез возвращает изменяемые ссылки на элементы:

#![allow(unused)]
fn main() {
let mut scores: &mut [i32] = &mut [7, 8, 9];
for score in scores {
    *score += 1;
}
}

Этот итератор возвращает изменяемые ссылки на элементы среза, поэтому, хотя тип элемента среза - i32, тип элемента итератора - &mut i32.

  • .iter и .iter_mut - явные методы для возврата итераторов по умолчанию.
  • Другие методы, возвращающие итераторы: .split, .splitn, .chunks, .windows и другие.

Таблицы методов

Методы Box<[T]>

ВерсияМетодОписание
1.82.0pub fn new_uninit_slice(len: usize) -> Box<[MaybeUninit<T>]>Создаёт новый упакованный срез с неинициализированным содержимым
1.92.0pub fn new_zeroed_slice(len: usize) -> Box<[MaybeUninit<T>]>Создаёт новый упакованный срез с неинициализированным содержимым, память заполнена 0 байтами
🔬pub fn try_new_uninit_slice(len: usize) -> Result<Box<[MaybeUninit<T>]>, AllocError>Создаёт новый упакованный срез с неинициализированным содержимым, возвращает ошибку при неудачном выделении
🔬pub fn try_new_zeroed_slice(len: usize) -> Result<Box<[MaybeUninit<T>]>, AllocError>Создаёт новый упакованный срез с неинициализированным содержимым, память заполнена 0 байтами, возвращает ошибку при неудачном выделении
🔬pub fn into_array<const N: usize>(self) -> Option<Box<[T; N]>>Преобразует упакованный срез в упакованный массив

Методы Box<[T], A> (с аллокатором)

ВерсияМетодОписание
🔬pub fn new_uninit_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>Создаёт новый упакованный срез с неинициализированным содержимым в предоставленном аллокаторе
🔬pub fn new_zeroed_slice_in(len: usize, alloc: A) -> Box<[MaybeUninit<T>], A>Создаёт новый упакованный срез с неинициализированным содержимым в предоставленном аллокаторе, память заполнена 0 байтами
🔬pub fn try_new_uninit_slice_in(len: usize, alloc: A) -> Result<Box<[MaybeUninit<T>], A>, AllocError>Создаёт новый упакованный срез с неинициализированным содержимым в предоставленном аллокаторе, возвращает ошибку при неудачном выделении
🔬pub fn try_new_zeroed_slice_in(len: usize, alloc: A) -> Result<Box<[MaybeUninit<T>], A>, AllocError>Создаёт новый упакованный срез с неинициализированным содержимым в предоставленном аллокаторе, память заполнена 0 байтами, возвращает ошибку при неудачном выделении

Методы Box<[MaybeUninit<T>], A>

ВерсияМетодОписание
1.82.0pub unsafe fn assume_init(self) -> Box<[T], A>Преобразует в Box<[T], A>

Методы [MaybeUninit<T>]

ВерсияМетодОписание
🔬pub const fn write_copy_of_slice(&mut self, src: &[T]) -> &mut [T] where T: CopyКопирует элементы из src в self, возвращает изменяемую ссылку на теперь инициализированное содержимое
🔬pub fn write_clone_of_slice(&mut self, src: &[T]) -> &mut [T] where T: CloneКлонирует элементы из src в self, возвращает изменяемую ссылку на теперь инициализированное содержимое
🔬pub fn write_filled(&mut self, value: T) -> &mut [T] where T: CloneЗаполняет срез элементами путём клонирования значения
🔬pub fn write_with<F>(&mut self, f: F) -> &mut [T] where F: FnMut(usize) -> TЗаполняет срез элементами, возвращаемыми вызовом замыкания для каждого индекса
🔬pub fn write_iter<I>(&mut self, it: I) -> (&mut [T], &mut [MaybeUninit<T>]) where I: IntoIterator<Item = T>Заполняет срез элементами, полученными от итератора
🔬pub const fn as_bytes(&self) -> &[MaybeUninit<u8>]Возвращает содержимое этого MaybeUninit как срез потенциально неинициализированных байтов
🔬pub const fn as_bytes_mut(&mut self) -> &mut [MaybeUninit<u8>]Возвращает содержимое этого MaybeUninit как изменяемый срез потенциально неинициализированных байтов
🔬pub const unsafe fn assume_init_drop(&mut self)Уничтожает содержащиеся значения на месте
🔬pub const unsafe fn assume_init_ref(&self) -> &[T]Получает общую ссылку на содержащееся значение
🔬pub const unsafe fn assume_init_mut(&mut self) -> &mut [T]Получает изменяемую (уникальную) ссылку на содержащееся значение

Методы [AsciiChar]

ВерсияМетодОписание
🔬pub const fn as_str(&self) -> &strПросматривает этот срез ASCII символов как UTF-8 str
🔬pub const fn as_bytes(&self) -> &[u8]Просматривает этот срез ASCII символов как срез байтов u8

Методы [u8]

ВерсияМетодОписание
1.23.0pub const fn is_ascii(&self) -> boolПроверяет, находятся ли все байты в этом срезе в диапазоне ASCII
🔬pub const fn as_ascii(&self) -> Option<&[AsciiChar]>Если этот срез is_ascii, возвращает его как срез ASCII символов, иначе None
🔬pub const unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar]Преобразует этот срез байтов в срез ASCII символов без проверки их валидности
1.23.0pub const fn eq_ignore_ascii_case(&self, other: &[u8]) -> boolПроверяет, являются ли два среза совпадающими без учёта регистра ASCII
1.23.0pub const fn make_ascii_uppercase(&mut self)Преобразует этот срез в эквивалент в верхнем регистре ASCII на месте
1.23.0pub const fn make_ascii_lowercase(&mut self)Преобразует этот срез в эквивалент в нижнем регистре ASCII на месте
1.60.0pub fn escape_ascii(&self) -> EscapeAscii<'_>Возвращает итератор, который создаёт экранированную версию этого среза, рассматривая его как ASCII строку
1.80.0pub const fn trim_ascii_start(&self) -> &[u8]Возвращает срез байтов с удалёнными ведущими ASCII пробельными байтами
1.80.0pub const fn trim_ascii_end(&self) -> &[u8]Возвращает срез байтов с удалёнными завершающими ASCII пробельными байтами
1.80.0pub const fn trim_ascii(&self) -> &[u8]Возвращает срез байтов с удалёнными ведущими и завершающими ASCII пробельными байтами

Основные методы [T]

ВерсияМетодОписание
1.0.0pub const fn len(&self) -> usizeВозвращает количество элементов в срезе
1.0.0pub const fn is_empty(&self) -> boolВозвращает true, если длина среза равна 0
1.0.0pub const fn first(&self) -> Option<&T>Возвращает первый элемент среза или None, если он пуст
1.0.0pub const fn first_mut(&mut self) -> Option<&mut T>Возвращает изменяемую ссылку на первый элемент среза или None, если он пуст
1.5.0pub const fn split_first(&self) -> Option<(&T, &[T])>Возвращает первый и все остальные элементы среза
1.5.0pub const fn split_first_mut(&mut self) -> Option<(&mut T, &mut [T])>Возвращает первый и все остальные элементы среза (изменяемые)
1.5.0pub const fn split_last(&self) -> Option<(&T, &[T])>Возвращает последний и все остальные элементы среза
1.5.0pub const fn split_last_mut(&mut self) -> Option<(&mut T, &mut [T])>Возвращает последний и все остальные элементы среза (изменяемые)
1.0.0pub const fn last(&self) -> Option<&T>Возвращает последний элемент среза или None, если он пуст
1.0.0pub const fn last_mut(&mut self) -> Option<&mut T>Возвращает изменяемую ссылку на последний элемент среза или None, если он пуст

Методы для чанков и окон

ВерсияМетодОписание
1.0.0pub fn iter(&self) -> Iter<'_, T>Возвращает итератор по срезу
1.0.0pub fn iter_mut(&mut self) -> IterMut<'_, T>Возвращает итератор, позволяющий изменять каждое значение
1.0.0pub fn windows(&self, size: usize) -> Windows<'_, T>Возвращает итератор по всем смежным окнам длины size
1.0.0pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T>Возвращает итератор по chunk_size элементам среза за раз
1.0.0pub fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut<'_, T>Возвращает итератор по chunk_size элементам среза за раз (изменяемые)
1.31.0pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T>Возвращает итератор по chunk_size элементам среза за раз (точные чанки)
1.31.0pub fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut<'_, T>Возвращает итератор по chunk_size элементам среза за раз (точные чанки, изменяемые)
1.31.0pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T>Возвращает итератор по chunk_size элементам среза за раз, начиная с конца
1.31.0pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut<'_, T>Возвращает итератор по chunk_size элементам среза за раз, начиная с конца (изменяемые)
1.31.0pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T>Возвращает итератор по chunk_size элементам среза за раз, начиная с конца (точные чанки)
1.31.0pub fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut<'_, T>Возвращает итератор по chunk_size элементам среза за раз, начиная с конца (точные чанки, изменяемые)

Методы для работы с индексами и указателями

ВерсияМетодОписание
1.0.0pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output> where I: SliceIndex<[T]>Возвращает ссылку на элемент или подсрез в зависимости от типа индекса
1.0.0pub fn get_mut<I>(&mut self, index: I) -> Option<&mut <I as SliceIndex<[T]>>::Output> where I: SliceIndex<[T]>Возвращает изменяемую ссылку на элемент или подсрез
1.0.0pub unsafe fn get_unchecked<I>(&self, index: I) -> &<I as SliceIndex<[T]>>::Output where I: SliceIndex<[T]>Возвращает ссылку на элемент или подсрез без проверки границ
1.0.0pub unsafe fn get_unchecked_mut<I>(&mut self, index: I) -> &mut <I as SliceIndex<[T]>>::Output where I: SliceIndex<[T]>Возвращает изменяемую ссылку на элемент или подсрез без проверки границ
1.0.0pub const fn as_ptr(&self) -> *const TВозвращает необработанный указатель на буфер среза
1.0.0pub const fn as_mut_ptr(&mut self) -> *mut TВозвращает небезопасный изменяемый указатель на буфер среза
1.48.0pub const fn as_ptr_range(&self) -> Range<*const T>Возвращает два необработанных указателя, охватывающих срез
1.48.0pub const fn as_mut_ptr_range(&mut self) -> Range<*mut T>Возвращает два небезопасных изменяемых указателя, охватывающих срез
1.93.0pub const fn as_array<const N: usize>(&self) -> Option<&[T; N]>Получает ссылку на базовый массив
1.93.0pub const fn as_mut_array<const N: usize>(&mut self) -> Option<&mut [T; N]>Получает изменяемую ссылку на базовый массив среза

Методы манипуляции с элементами

ВерсияМетодОписание
1.0.0pub const fn swap(&mut self, a: usize, b: usize)Меняет местами два элемента в срезе
🔬pub const unsafe fn swap_unchecked(&mut self, a: usize, b: usize)Меняет местами два элемента в срезе без проверки границ
1.0.0pub const fn reverse(&mut self)Изменяет порядок элементов в срезе на противоположный на месте

Методы разделения срезов

ВерсияМетодОписание
1.0.0pub const fn split_at(&self, mid: usize) -> (&[T], &[T])Делит один срез на два по индексу
1.0.0pub const fn split_at_mut(&mut self, mid: usize) -> (&mut [T], &mut [T])Делит один изменяемый срез на два по индексу
1.79.0pub const unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T])Делит один срез на два по индексу без проверки границ
1.79.0pub const unsafe fn split_at_mut_unchecked(&mut self, mid: usize) -> (&mut [T], &mut [T])Делит один изменяемый срез на два по индексу без проверки границ
1.80.0pub const fn split_at_checked(&self, mid: usize) -> Option<(&[T], &[T])>Делит один срез на два по индексу, возвращает None если срез слишком короткий
1.80.0pub const fn split_at_mut_checked(&mut self, mid: usize) -> Option<(&mut [T], &mut [T])>Делит один изменяемый срез на два по индексу, возвращает None если срез слишком короткий
1.0.0pub fn split<F>(&self, pred: F) -> Split<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по подрезам, разделённым элементами, которые соответствуют pred
1.0.0pub fn split_mut<F>(&mut self, pred: F) -> SplitMut<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred
1.51.0pub fn split_inclusive<F>(&self, pred: F) -> SplitInclusive<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, включая разделитель в конец предыдущего подреза
1.51.0pub fn split_inclusive_mut<F>(&mut self, pred: F) -> SplitInclusiveMut<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred, включая разделитель
1.27.0pub fn rsplit<F>(&self, pred: F) -> RSplit<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, начиная с конца среза
1.27.0pub fn rsplit_mut<F>(&mut self, pred: F) -> RSplitMut<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred, начиная с конца среза
1.0.0pub fn splitn<F>(&self, n: usize, pred: F) -> SplitN<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, ограниченный возвратом не более n элементов
1.0.0pub fn splitn_mut<F>(&mut self, n: usize, pred: F) -> SplitNMut<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred, ограниченный возвратом не более n элементов
1.0.0pub fn rsplitn<F>(&self, n: usize, pred: F) -> RSplitN<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, ограниченный возвратом не более n элементов, начиная с конца
1.0.0pub fn rsplitn_mut<F>(&mut self, n: usize, pred: F) -> RSplitNMut<'_, T, F> where F: FnMut(&T) -> boolВозвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred, ограниченный возвратом не более n элементов, начиная с конца
🔬pub fn split_once<F>(&self, pred: F) -> Option<(&[T], &[T])> where F: FnMut(&T) -> boolРазделяет срез на первом элементе, который соответствует указанному предикату
🔬pub fn rsplit_once<F>(&self, pred: F) -> Option<(&[T], &[T])> where F: FnMut(&T) -> boolРазделяет срез на последнем элементе, который соответствует указанному предикату

Методы поиска и сравнения

ВерсияМетодОписание
1.0.0pub fn contains(&self, x: &T) -> bool where T: PartialEqВозвращает true, если срез содержит элемент с заданным значением
1.0.0pub fn starts_with(&self, needle: &[T]) -> bool where T: PartialEqВозвращает true, если needle является префиксом среза
1.0.0pub fn ends_with(&self, needle: &[T]) -> bool where T: PartialEqВозвращает true, если needle является суффиксом среза
1.51.0pub fn strip_prefix<P>(&self, prefix: &P) -> Option<&[T]> where P: SlicePattern<Item = T> + ?Sized, T: PartialEqВозвращает подсрез с удалённым префиксом
1.51.0pub fn strip_suffix<P>(&self, suffix: &P) -> Option<&[T]> where P: SlicePattern<Item = T> + ?Sized, T: PartialEqВозвращает подсрез с удалённым суффиксом
🔬pub fn strip_circumfix<S, P>(&self, prefix: &P, suffix: &S) -> Option<&[T]> where T: PartialEq, S: SlicePattern<Item = T> + ?Sized, P: SlicePattern<Item = T> + ?SizedВозвращает подсрез с удалёнными префиксом и суффиксом
🔬pub fn trim_prefix<P>(&self, prefix: &P) -> &[T] where P: SlicePattern<Item = T> + ?Sized, T: PartialEqВозвращает подсрез с опционально удалённым префиксом
🔬pub fn trim_suffix<P>(&self, suffix: &P) -> &[T] where P: SlicePattern<Item = T> + ?Sized, T: PartialEqВозвращает подсрез с опционально удалённым суффиксом

Методы бинарного поиска

ВерсияМетодОписание
1.0.0pub fn binary_search(&self, x: &T) -> Result<usize, usize> where T: OrdБинарно ищет в этом срезе заданный элемент
1.0.0pub fn binary_search_by<'a, F>(&'a self, f: F) -> Result<usize, usize> where F: FnMut(&'a T) -> OrderingБинарно ищет в этом срезе с функцией-компаратором
1.10.0pub fn binary_search_by_key<'a, B, F>(&'a self, b: &B, f: F) -> Result<usize, usize> where F: FnMut(&'a T) -> B, B: OrdБинарно ищет в этом срезе с функцией извлечения ключа
1.52.0pub fn partition_point<P>(&self, pred: P) -> usize where P: FnMut(&T) -> boolВозвращает индекс точки раздела согласно заданному предикату

Методы сортировки

ВерсияМетодОписание
1.0.0pub fn sort(&mut self) where T: OrdСортирует срез в возрастающем порядке, сохраняя начальный порядок равных элементов (стабильная сортировка)
1.0.0pub fn sort_by<F>(&mut self, compare: F) where F: FnMut(&T, &T) -> OrderingСортирует срез в возрастающем порядке с функцией сравнения, сохраняя начальный порядок равных элементов
1.7.0pub fn sort_by_key<K, F>(&mut self, f: F) where F: FnMut(&T) -> K, K: OrdСортирует срез в возрастающем порядке с функцией извлечения ключа, сохраняя начальный порядок равных элементов
1.34.0pub fn sort_by_cached_key<K, F>(&mut self, f: F) where F: FnMut(&T) -> K, K: OrdСортирует срез в возрастающем порядке с функцией извлечения ключа, сохраняя начальный порядок равных элементов (с кэшированием ключей)
1.20.0pub fn sort_unstable(&mut self) where T: OrdСортирует срез в возрастающем порядке без сохранения начального порядка равных элементов (нестабильная сортировка)
1.20.0pub fn sort_unstable_by<F>(&mut self, compare: F) where F: FnMut(&T, &T) -> OrderingСортирует срез в возрастающем порядке с функцией сравнения без сохранения начального порядка равных элементов
1.20.0pub fn sort_unstable_by_key<K, F>(&mut self, f: F) where F: FnMut(&T) -> K, K: OrdСортирует срез в возрастающем порядке с функцией извлечения ключа без сохранения начального порядка равных элементов

Методы выбора элементов

ВерсияМетодОписание
1.49.0pub fn select_nth_unstable(&mut self, index: usize) -> (&mut [T], &mut T, &mut [T]) where T: OrdПереупорядочивает срез так, чтобы элемент по индексу находился в позиции порядка сортировки
1.49.0pub fn select_nth_unstable_by<F>(&mut self, index: usize, compare: F) -> (&mut [T], &mut T, &mut [T]) where F: FnMut(&T, &T) -> OrderingПереупорядочивает срез с функцией-компаратором так, чтобы элемент по индексу находился в позиции порядка сортировки
1.49.0pub fn select_nth_unstable_by_key<K, F>(&mut self, index: usize, f: F) -> (&mut [T], &mut T, &mut [T]) where F: FnMut(&T) -> K, K: OrdПереупорядочивает срез с функцией извлечения ключа так, чтобы элемент по индексу находился в позиции порядка сортировки

Методы работы с дубликатами

ВерсияМетодОписание
🔬pub fn partition_dedup(&mut self) -> (&mut [T], &mut [T]) where T: PartialEqПеремещает все последовательные повторяющиеся элементы в конец среза согласно реализации PartialEq
🔬pub fn partition_dedup_by<F>(&mut self, same_bucket: F) -> (&mut [T], &mut [T]) where F: FnMut(&mut T, &mut T) -> boolПеремещает все, кроме первого, последовательных элементов в конец среза, удовлетворяющих заданному отношению равенства
🔬pub fn partition_dedup_by_key<K, F>(&mut self, key: F) -> (&mut [T], &mut [T]) where F: FnMut(&mut T) -> K, K: PartialEqПеремещает все, кроме первого, последовательных элементов в конец среза, которые разрешаются в один и тот же ключ

Методы вращения

ВерсияМетодОписание
1.26.0pub const fn rotate_left(&mut self, mid: usize)Вращает срез на месте так, что первые mid элементов среза перемещаются в конец
1.26.0pub const fn rotate_right(&mut self, k: usize)Вращает срез на месте так, что первые self.len() - k элементов среза перемещаются в конец

Методы заполнения и копирования

ВерсияМетодОписание
1.50.0pub fn fill(&mut self, value: T) where T: CloneЗаполняет self элементами путём клонирования значения
1.51.0pub fn fill_with<F>(&mut self, f: F) where F: FnMut() -> TЗаполняет self элементами, возвращаемыми при многократном вызове замыкания
1.7.0pub fn clone_from_slice(&mut self, src: &[T]) where T: CloneКопирует элементы из src в self
1.9.0pub const fn copy_from_slice(&mut self, src: &[T]) where T: CopyКопирует все элементы из src в self, используя memcpy
1.37.0pub fn copy_within<R>(&mut self, src: R, dest: usize) where R: RangeBounds<usize>, T: CopyКопирует элементы из одной части среза в другую часть самого себя, используя memmove
1.27.0pub fn swap_with_slice(&mut self, other: &mut [T])Меняет местами все элементы в self с теми, что в other

Методы преобразования типов

ВерсияМетодОписание
1.30.0pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T])Преобразует срез в срез другого типа, обеспечивая сохранение выравнивания типов
1.30.0pub unsafe fn align_to_mut<U>(&mut self) -> (&mut [T], &mut [U], &mut [T])Преобразует изменяемый срез в изменяемый срез другого типа, обеспечивая сохранение выравнивания типов
🔬pub fn as_simd<const LANES: usize>(&self) -> (&[T], &[Simd<T, LANES>], &[T]) where Simd<T, LANES>: AsRef<[T; LANES]>, T: SimdElement, LaneCount<LANES>: SupportedLaneCountРазделяет срез на префикс, середину из выровненных SIMD типов и суффикс
🔬pub fn as_simd_mut<const LANES: usize>(&mut self) -> (&mut [T], &mut [Simd<T, LANES>], &mut [T]) where Simd<T, LANES>: AsMut<[T; LANES]>, T: SimdElement, LaneCount<LANES>: SupportedLaneCountРазделяет изменяемый срез на изменяемый префикс, середину из выровненных SIMD типов и изменяемый суффикс

Методы проверки отсортированности

ВерсияМетодОписание
1.82.0pub fn is_sorted(&self) -> bool where T: PartialOrdПроверяет, отсортированы ли элементы этого среза
1.82.0pub fn is_sorted_by<'a, F>(&'a self, compare: F) -> bool where F: FnMut(&'a T, &'a T) -> boolПроверяет, отсортированы ли элементы этого среза, используя заданную функцию-компаратор
1.82.0pub fn is_sorted_by_key<'a, F, K>(&'a self, f: F) -> bool where F: FnMut(&'a T) -> K, K: PartialOrdПроверяет, отсортированы ли элементы этого среза, используя заданную функцию извлечения ключа

Методы разделения с отрезанием

ВерсияМетодОписание
1.87.0pub fn split_off<'a, R>(self: &mut &'a [T], range: R) -> Option<&'a [T]> where R: OneSidedRange<usize>Удаляет подсрез, соответствующий заданному диапазону, и возвращает ссылку на него
1.87.0pub fn split_off_mut<'a, R>(self: &mut &'a mut [T], range: R) -> Option<&'a mut [T]> where R: OneSidedRange<usize>Удаляет подсрез, соответствующий заданному диапазону, и возвращает изменяемую ссылку на него
1.87.0pub fn split_off_first<'a>(self: &mut &'a [T]) -> Option<&'a T>Удаляет первый элемент среза и возвращает ссылку на него
1.87.0pub fn split_off_first_mut<'a>(self: &mut &'a mut [T]) -> Option<&'a mut T>Удаляет первый элемент среза и возвращает изменяемую ссылку на него
1.87.0pub fn split_off_last<'a>(self: &mut &'a [T]) -> Option<&'a T>Удаляет последний элемент среза и возвращает ссылку на него
1.87.0pub fn split_off_last_mut<'a>(self: &mut &'a mut [T]) -> Option<&'a mut T>Удаляет последний элемент среза и возвращает изменяемую ссылку на него

Методы для работы с несколькими индексами

ВерсияМетодОписание
1.86.0pub unsafe fn get_disjoint_unchecked_mut<I, const N: usize>(&mut self, indices: [I; N]) -> [&mut <I as SliceIndex<[T]>>::Output; N] where I: GetDisjointMutIndex + SliceIndex<[T]>Возвращает изменяемые ссылки на многие индексы одновременно без каких-либо проверок
1.86.0pub fn get_disjoint_mut<I, const N: usize>(&mut self, indices: [I; N]) -> Result<[&mut <I as SliceIndex<[T]>>::Output; N], GetDisjointMutError> where I: GetDisjointMutIndex + SliceIndex<[T]>Возвращает изменяемые ссылки на многие индексы одновременно

Методы для работы со смещениями

ВерсияМетодОписание
🔬pub fn element_offset(&self, element: &T) -> Option<usize>Возвращает индекс, на который указывает ссылка на элемент
🔬pub fn subslice_range(&self, subslice: &[T]) -> Option<Range<usize>>Возвращает диапазон индексов, на которые указывает подсрез

Методы [MaybeUninit<T>] - дополнительное выравнивание

ВерсияМетодОписание
🔬pub fn align_to_uninit_mut<U>(&mut self) -> (&mut [MaybeUninit<T>], &mut [MaybeUninit<U>], &mut [MaybeUninit<T>])Преобразует неинициализированный изменяемый срез в неинициализированный изменяемый срез другого типа, обеспечивая сохранение выравнивания

Методы [[T; N]] (срезы массивов)

ВерсияМетодОписание
1.80.0pub const fn as_flattened(&self) -> &[T]Берёт &[[T; N]] и преобразует его в &[T]
1.80.0pub const fn as_flattened_mut(&mut self) -> &mut [T]Берёт &mut [[T; N]] и преобразует его в &mut [T]

Методы [f32] и [f64]

ВерсияМетодОписание
🔬pub fn sort_floats(&mut self)Сортирует срез чисел с плавающей запятой

Метод [u8] для работы с UTF-8

ВерсияМетодОписание
1.79.0pub fn utf8_chunks(&self) -> Utf8Chunks<'_>Создаёт итератор по смежным допустимым диапазонам UTF-8 этого среза и фрагментам не-UTF-8 между ними

Методы преобразования в векторы

ВерсияМетодОписание
1.0.0pub fn to_vec(&self) -> Vec<T> where T: CloneКопирует self в новый Vec
🔬pub fn to_vec_in<A>(&self, alloc: A) -> Vec<T, A> where A: Allocator, T: CloneКопирует self в новый Vec с аллокатором
1.0.0pub fn into_vec<A>(self: Box<[T], A>) -> Vec<T, A> where A: AllocatorПреобразует self в вектор без клонирования или выделения памяти
1.40.0pub fn repeat(&self, n: usize) -> Vec<T> where T: CopyСоздаёт вектор, копируя срез n раз

Методы объединения и соединения

ВерсияМетодОписание
1.0.0pub fn concat<Item>(&self) -> <[T] as Concat<Item>>::Output where [T]: Concat<Item>, Item: ?SizedПреобразует срез T в единое значение Self::Output
1.3.0pub fn join<Separator>(&self, sep: Separator) -> <[T] as Join<Separator>>::Output where [T]: Join<Separator>Преобразует срез T в единое значение Self::Output, размещая заданный разделитель между каждым
1.0.0pub fn connect<Separator>(&self, sep: Separator) -> <[T] as Join<Separator>>::Output where [T]: Join<Separator>Устаревший аналог join

Методы преобразования регистра ASCII для [u8]

ВерсияМетодОписание
1.23.0pub fn to_ascii_uppercase(&self) -> Vec<u8>Возвращает вектор, содержащий копию этого среза, где каждый байт отображён в его эквивалент в верхнем регистре ASCII
1.23.0pub fn to_ascii_lowercase(&self) -> Vec<u8>Возвращает вектор, содержащий копию этого среза, где каждый байт отображён в его эквивалент в нижнем регистре ASCII

Реализации трейтов

Трейт AsMut

ТипРеализация
impl<T> AsMut<[T]> for [T]fn as_mut(&mut self) -> &mut [T]
impl<T, const N: usize> AsMut<[T]> for [T; N]fn as_mut(&mut self) -> &mut [T]
impl<T, const N: usize> AsMut<[T]> for Simd<T, N> where LaneCount<N>: SupportedLaneCount, T: SimdElementfn as_mut(&mut self) -> &mut [T]
impl<T, A> AsMut<[T]> for Vec<T, A> where A: Allocatorfn as_mut(&mut self) -> &mut [T]
impl AsMut<[u8]> for ByteStrfn as_mut(&mut self) -> &mut [u8]
impl AsMut<[u8]> for ByteStringfn as_mut(&mut self) -> &mut [u8]

Трейт AsRef

ТипРеализация
impl<T> AsRef<[T]> for [T]fn as_ref(&self) -> &[T]
impl<T, const N: usize> AsRef<[T]> for [T; N]fn as_ref(&self) -> &[T]
impl<'a, T, A> AsRef<[T]> for Drain<'a, T, A> where A: Allocatorfn as_ref(&self) -> &[T]
impl<T, A> AsRef<[T]> for IntoIter<T, A> where A: Allocatorfn as_ref(&self) -> &[T]
impl<T> AsRef<[T]> for Iter<'_, T>fn as_ref(&self) -> &[T]
impl<T> AsRef<[T]> for IterMut<'_, T>fn as_ref(&self) -> &[T]
impl<T, const N: usize> AsRef<[T]> for Simd<T, N> where LaneCount<N>: SupportedLaneCount, T: SimdElementfn as_ref(&self) -> &[T]
impl<T, A> AsRef<[T]> for Vec<T, A> where A: Allocatorfn as_ref(&self) -> &[T]
impl AsRef<[u8]> for ByteStrfn as_ref(&self) -> &[u8]
impl AsRef<[u8]> for ByteStringfn as_ref(&self) -> &[u8]
impl<'a> AsRef<[u8]> for Drain<'a>fn as_ref(&self) -> &[u8]
impl AsRef<[u8]> for Stringfn as_ref(&self) -> &[u8]
impl AsRef<[u8]> for strfn as_ref(&self) -> &[u8]

Устаревший трейт AsciiExt

ТипРеализация
impl AsciiExt for [u8]type Owned = Vec<u8>

Трейт Borrow

ТипРеализация
impl<T, const N: usize> Borrow<[T]> for [T; N]fn borrow(&self) -> &[T]
impl<T, A> Borrow<[T]> for Vec<T, A> where A: Allocatorfn borrow(&self) -> &[T]
impl Borrow<[u8]> for ByteStrfn borrow(&self) -> &[u8]
impl Borrow<[u8]> for ByteStringfn borrow(&self) -> &[u8]

Трейт BorrowMut

ТипРеализация
impl<T, const N: usize> BorrowMut<[T]> for [T; N]fn borrow_mut(&mut self) -> &mut [T]
impl<T, A> BorrowMut<[T]> for Vec<T, A> where A: Allocatorfn borrow_mut(&mut self) -> &mut [T]
impl BorrowMut<[u8]> for ByteStrfn borrow_mut(&mut self) -> &mut [u8]
impl BorrowMut<[u8]> for ByteStringfn borrow_mut(&mut self) -> &mut [u8]

Трейт BufRead

ТипРеализация
impl BufRead for &[u8]fn fill_buf(&mut self) -> Result<&[u8]>

Трейт Clone

ТипРеализация
impl<T, A> Clone for Box<[T], A> where T: Clone, A: Allocator + Clonefn clone(&self) -> Box<[T], A>

Трейт Debug

ТипРеализация
impl<T> Debug for [T] where T: Debugfn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Трейт Default

ТипРеализация
impl<T> Default for &[T]fn default() -> &[T]
impl<T> Default for &mut [T]fn default() -> &mut [T]
impl<T> Default for Box<[T]>fn default() -> Box<[T]>

Трейт From

ТипРеализация
impl<T> From<&[T]> for Arc<[T]> where T: Clonefn from(v: &[T]) -> Arc<[T]>
impl<T> From<&[T]> for Box<[T]> where T: Clonefn from(slice: &[T]) -> Box<[T]>
impl<'a, T> From<&'a [T]> for Cow<'a, [T]> where T: Clonefn from(s: &'a [T]) -> Cow<'a, [T]>
impl<T> From<&[T]> for Rc<[T]> where T: Clonefn from(v: &[T]) -> Rc<[T]>
impl<T> From<&[T]> for Vec<T> where T: Clonefn from(s: &[T]) -> Vec<T>
impl<'data> From<&'data mut [MaybeUninit<u8>]> for BorrowedBuf<'data>fn from(buf: &'data mut [MaybeUninit<u8>]) -> BorrowedBuf<'data>
impl<T> From<&mut [T]> for Arc<[T]> where T: Clonefn from(v: &mut [T]) -> Arc<[T]>
impl<T> From<&mut [T]> for Box<[T]> where T: Clonefn from(slice: &mut [T]) -> Box<[T]>
impl<T> From<&mut [T]> for Rc<[T]> where T: Clonefn from(v: &mut [T]) -> Rc<[T]>
impl<T> From<&mut [T]> for Vec<T> where T: Clonefn from(s: &mut [T]) -> Vec<T>
impl<'data> From<&'data mut [u8]> for BorrowedBuf<'data>fn from(slice: &'data mut [u8]) -> BorrowedBuf<'data>
impl<T, const N: usize> From<[T; N]> for Box<[T]>fn from(array: [T; N]) -> Box<[T]>
impl From<Box<ByteStr>> for Box<[u8]>fn from(s: Box<ByteStr>) -> Box<[u8]>
impl<A> From<Box<str, A>> for Box<[u8], A> where A: Allocatorfn from(s: Box<str, A>) -> Box<[u8], A>
impl<T> From<Cow<'_, [T]>> for Box<[T]> where T: Clonefn from(cow: Cow<'_, [T]>) -> Box<[T]>
impl<T, A> From<Vec<T, A>> for Box<[T], A> where A: Allocatorfn from(v: Vec<T, A>) -> Box<[T], A>

Трейт FromIterator

ТипРеализация
impl<'a> FromIterator<&'a [u8]> for ByteStringfn from_iter<T>(iter: T) -> ByteString where T: IntoIterator<Item = &'a [u8]>
impl<I> FromIterator<I> for Box<[I]>fn from_iter<T>(iter: T) -> Box<[I]> where T: IntoIterator<Item = I>

Трейт Hash

ТипРеализация
impl<T> Hash for [T] where T: Hashfn hash<H>(&self, state: &mut H) where H: Hasher

Трейты Index и IndexMut

ТипРеализация
impl<T, I> Index<I> for [T] where I: SliceIndex<[T]>fn index(&self, index: I) -> &<I as SliceIndex<[T]>>::Output
impl<T, I> IndexMut<I> for [T] where I: SliceIndex<[T]>fn index_mut(&mut self, index: I) -> &mut <I as SliceIndex<[T]>>::Output

Трейт IntoIterator

ТипРеализация
impl<'a, T> IntoIterator for &'a [T]type Item = &'a T; type IntoIter = Iter<'a, T>
impl<'a, I, A> IntoIterator for &'a Box<[I], A> where A: Allocatortype Item = &'a I; type IntoIter = Iter<'a, I>
impl<'a, T> IntoIterator for &'a mut [T]type Item = &'a mut T; type IntoIter = IterMut<'a, T>
impl<'a, I, A> IntoIterator for &'a mut Box<[I], A> where A: Allocatortype Item = &'a mut I; type IntoIter = IterMut<'a, I>
impl<I, A> IntoIterator for Box<[I], A> where A: Allocatortype Item = I; type IntoIter = IntoIter<I, A>

Трейт Ord

ТипРеализация
impl<T> Ord for [T] where T: Ordfn cmp(&self, other: &[T]) -> Ordering

Трейт PartialEq

ТипРеализация
impl<T, U, const N: usize> PartialEq<&[U]> for [T; N] where T: PartialEq<U>fn eq(&self, other: &&[U]) -> bool
impl<T, U> PartialEq<&[U]> for Cow<'_, [T]> where T: PartialEq<U> + Clonefn eq(&self, other: &&[U]) -> bool
impl<T, U, A> PartialEq<&[U]> for Vec<T, A> where A: Allocator, T: PartialEq<U>fn eq(&self, other: &&[U]) -> bool
impl<T, U, A> PartialEq<&[U]> for VecDeque<T, A> where A: Allocator, T: PartialEq<U>fn eq(&self, other: &&[U]) -> bool
impl<'a> PartialEq<&[u8]> for ByteStrfn eq(&self, other: &&[u8]) -> bool
impl<'a> PartialEq<&[u8]> for ByteStringfn eq(&self, other: &&[u8]) -> bool
impl<T, U, const N: usize> PartialEq<&mut [U]> for [T; N] where T: PartialEq<U>fn eq(&self, other: &&mut [U]) -> bool
impl<T, U> PartialEq<&mut [U]> for Cow<'_, [T]> where T: PartialEq<U> + Clonefn eq(&self, other: &&mut [U]) -> bool
impl<T, U, A> PartialEq<&mut [U]> for Vec<T, A> where A: Allocator, T: PartialEq<U>fn eq(&self, other: &&mut [U]) -> bool
impl<T, U, A> PartialEq<&mut [U]> for VecDeque<T, A> where A: Allocator, T: PartialEq<U>fn eq(&self, other: &&mut [U]) -> bool
impl<T, U> PartialEq<[U]> for [T] where T: PartialEq<U>fn eq(&self, other: &[U]) -> bool
impl<T, U, const N: usize> PartialEq<[U]> for [T; N] where T: PartialEq<U>fn eq(&self, other: &[U]) -> bool
impl<T, U, A> PartialEq<[U]> for Vec<T, A> where A: Allocator, T: PartialEq<U>fn eq(&self, other: &[U]) -> bool
impl<T, U, const N: usize> PartialEq<[U; N]> for &[T] where T: PartialEq<U>fn eq(&self, other: &[U; N]) -> bool
impl<T, U, const N: usize> PartialEq<[U; N]> for &mut [T] where T: PartialEq<U>fn eq(&self, other: &[U; N]) -> bool
impl<T, U, const N: usize> PartialEq<[U; N]> for [T] where T: PartialEq<U>fn eq(&self, other: &[U; N]) -> bool
impl<'a> PartialEq<[u8]> for ByteStrfn eq(&self, other: &[u8]) -> bool
impl<'a> PartialEq<[u8]> for ByteStringfn eq(&self, other: &[u8]) -> bool
impl<'a> PartialEq<ByteStr> for &[u8]fn eq(&self, other: &ByteStr) -> bool
impl<'a> PartialEq<ByteStr> for [u8]fn eq(&self, other: &ByteStr) -> bool
impl<'a> PartialEq<ByteString> for &[u8]fn eq(&self, other: &ByteString) -> bool
impl<'a> PartialEq<ByteString> for [u8]fn eq(&self, other: &ByteString) -> bool
impl<T, U, A> PartialEq<Vec<U, A>> for &[T] where A: Allocator, T: PartialEq<U>fn eq(&self, other: &Vec<U, A>) -> bool
impl<T, U, A> PartialEq<Vec<U, A>> for &mut [T] where A: Allocator, T: PartialEq<U>fn eq(&self, other: &Vec<U, A>) -> bool
impl<T, U, A> PartialEq<Vec<U, A>> for [T] where A: Allocator, T: PartialEq<U>fn eq(&self, other: &Vec<U, A>) -> bool

Трейт PartialOrd

ТипРеализация
impl<T> PartialOrd for [T] where T: PartialOrdfn partial_cmp(&self, other: &[T]) -> Option<Ordering>

Трейт Pattern

ТипРеализация
impl<'b> Pattern for &'b [char]type Searcher<'a> = CharSliceSearcher<'a, 'b>

Трейт Read

ТипРеализация
impl Read for &[u8]fn read(&mut self, buf: &mut [u8]) -> Result<usize>

Трейт SliceIndex

ТипРеализация
impl<T> SliceIndex<[T]> for (Bound<usize>, Bound<usize>)type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<Range<usize>>type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeFrom<usize>>type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeFull>type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeInclusive<usize>>type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeTo<usize>>type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<RangeToInclusive<usize>>type Output = [T]
impl<T> SliceIndex<[T]> for Clamp<usize>type Output = T
impl<T> SliceIndex<[T]> for Lasttype Output = T
impl<T> SliceIndex<[T]> for Range<usize>type Output = [T]
impl<T> SliceIndex<[T]> for RangeFrom<usize>type Output = [T]
impl<T> SliceIndex<[T]> for RangeFulltype Output = [T]
impl<T> SliceIndex<[T]> for RangeInclusive<usize>type Output = [T]
impl<T> SliceIndex<[T]> for RangeTo<usize>type Output = [T]
impl<T> SliceIndex<[T]> for RangeToInclusive<usize>type Output = [T]
impl<T> SliceIndex<[T]> for usizetype Output = T

Трейт ToOwned

ТипРеализация
impl<T> ToOwned for [T] where T: Clonetype Owned = Vec<T>

Трейт TryFrom

ТипРеализация
impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N]type Error = TryFromSliceError
impl<T, const N: usize> TryFrom<&[T]> for [T; N] where T: Copytype Error = TryFromSliceError
impl<T, const N: usize> TryFrom<&[T]> for Simd<T, N> where LaneCount<N>: SupportedLaneCount, T: SimdElementtype Error = TryFromSliceError
impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N]type Error = TryFromSliceError
impl<T, const N: usize> TryFrom<&mut [T]> for [T; N] where T: Copytype Error = TryFromSliceError
impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N> where LaneCount<N>: SupportedLaneCount, T: SimdElementtype Error = TryFromSliceError

Трейт Write

ТипРеализация
impl Write for &mut [u8]fn write(&mut self, data: &[u8]) -> Result<usize>

Автоматические реализации трейтов

ТипТрейты
impl<T> Freeze for [T] where T: FreezeFreeze
impl<T> RefUnwindSafe for [T] where T: RefUnwindSafeRefUnwindSafe
impl<T> Send for [T] where T: SendSend
impl<T> !Sized for [T]!Sized
impl<T> Sync for [T] where T: SyncSync
impl<T> Unpin for [T] where T: UnpinUnpin
impl<T> UnwindSafe for [T] where T: UnwindSafeUnwindSafe

Реализации по умолчанию

ТипТрейт
impl<T> Any for T where T: 'static + ?SizedAny
impl<T> Borrow<T> for T where T: ?SizedBorrow
impl<T> BorrowMut<T> for T where T: ?SizedBorrowMut

Примечание: 🔬 обозначает экспериментальные API, доступные только в ночных сборках Rust.