Динамически изменяемое представление непрерывной последовательности [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 и другие.
| Версия | Метод | Описание |
| 1.82.0 | pub fn new_uninit_slice(len: usize) -> Box<[MaybeUninit<T>]> | Создаёт новый упакованный срез с неинициализированным содержимым |
| 1.92.0 | pub 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]>> | Преобразует упакованный срез в упакованный массив |
| Версия | Метод | Описание |
| 🔬 | 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 байтами, возвращает ошибку при неудачном выделении |
| Версия | Метод | Описание |
| 1.82.0 | pub unsafe fn assume_init(self) -> Box<[T], A> | Преобразует в Box<[T], A> |
| Версия | Метод | Описание |
| 🔬 | 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] | Получает изменяемую (уникальную) ссылку на содержащееся значение |
| Версия | Метод | Описание |
| 🔬 | pub const fn as_str(&self) -> &str | Просматривает этот срез ASCII символов как UTF-8 str |
| 🔬 | pub const fn as_bytes(&self) -> &[u8] | Просматривает этот срез ASCII символов как срез байтов u8 |
| Версия | Метод | Описание |
| 1.23.0 | pub 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.0 | pub const fn eq_ignore_ascii_case(&self, other: &[u8]) -> bool | Проверяет, являются ли два среза совпадающими без учёта регистра ASCII |
| 1.23.0 | pub const fn make_ascii_uppercase(&mut self) | Преобразует этот срез в эквивалент в верхнем регистре ASCII на месте |
| 1.23.0 | pub const fn make_ascii_lowercase(&mut self) | Преобразует этот срез в эквивалент в нижнем регистре ASCII на месте |
| 1.60.0 | pub fn escape_ascii(&self) -> EscapeAscii<'_> | Возвращает итератор, который создаёт экранированную версию этого среза, рассматривая его как ASCII строку |
| 1.80.0 | pub const fn trim_ascii_start(&self) -> &[u8] | Возвращает срез байтов с удалёнными ведущими ASCII пробельными байтами |
| 1.80.0 | pub const fn trim_ascii_end(&self) -> &[u8] | Возвращает срез байтов с удалёнными завершающими ASCII пробельными байтами |
| 1.80.0 | pub const fn trim_ascii(&self) -> &[u8] | Возвращает срез байтов с удалёнными ведущими и завершающими ASCII пробельными байтами |
| Версия | Метод | Описание |
| 1.0.0 | pub const fn len(&self) -> usize | Возвращает количество элементов в срезе |
| 1.0.0 | pub const fn is_empty(&self) -> bool | Возвращает true, если длина среза равна 0 |
| 1.0.0 | pub const fn first(&self) -> Option<&T> | Возвращает первый элемент среза или None, если он пуст |
| 1.0.0 | pub const fn first_mut(&mut self) -> Option<&mut T> | Возвращает изменяемую ссылку на первый элемент среза или None, если он пуст |
| 1.5.0 | pub const fn split_first(&self) -> Option<(&T, &[T])> | Возвращает первый и все остальные элементы среза |
| 1.5.0 | pub const fn split_first_mut(&mut self) -> Option<(&mut T, &mut [T])> | Возвращает первый и все остальные элементы среза (изменяемые) |
| 1.5.0 | pub const fn split_last(&self) -> Option<(&T, &[T])> | Возвращает последний и все остальные элементы среза |
| 1.5.0 | pub const fn split_last_mut(&mut self) -> Option<(&mut T, &mut [T])> | Возвращает последний и все остальные элементы среза (изменяемые) |
| 1.0.0 | pub const fn last(&self) -> Option<&T> | Возвращает последний элемент среза или None, если он пуст |
| 1.0.0 | pub const fn last_mut(&mut self) -> Option<&mut T> | Возвращает изменяемую ссылку на последний элемент среза или None, если он пуст |
| Версия | Метод | Описание |
| 1.0.0 | pub fn iter(&self) -> Iter<'_, T> | Возвращает итератор по срезу |
| 1.0.0 | pub fn iter_mut(&mut self) -> IterMut<'_, T> | Возвращает итератор, позволяющий изменять каждое значение |
| 1.0.0 | pub fn windows(&self, size: usize) -> Windows<'_, T> | Возвращает итератор по всем смежным окнам длины size |
| 1.0.0 | pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T> | Возвращает итератор по chunk_size элементам среза за раз |
| 1.0.0 | pub fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut<'_, T> | Возвращает итератор по chunk_size элементам среза за раз (изменяемые) |
| 1.31.0 | pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T> | Возвращает итератор по chunk_size элементам среза за раз (точные чанки) |
| 1.31.0 | pub fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut<'_, T> | Возвращает итератор по chunk_size элементам среза за раз (точные чанки, изменяемые) |
| 1.31.0 | pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T> | Возвращает итератор по chunk_size элементам среза за раз, начиная с конца |
| 1.31.0 | pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut<'_, T> | Возвращает итератор по chunk_size элементам среза за раз, начиная с конца (изменяемые) |
| 1.31.0 | pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T> | Возвращает итератор по chunk_size элементам среза за раз, начиная с конца (точные чанки) |
| 1.31.0 | pub fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut<'_, T> | Возвращает итератор по chunk_size элементам среза за раз, начиная с конца (точные чанки, изменяемые) |
| Версия | Метод | Описание |
| 1.0.0 | pub fn get<I>(&self, index: I) -> Option<&<I as SliceIndex<[T]>>::Output> where I: SliceIndex<[T]> | Возвращает ссылку на элемент или подсрез в зависимости от типа индекса |
| 1.0.0 | pub fn get_mut<I>(&mut self, index: I) -> Option<&mut <I as SliceIndex<[T]>>::Output> where I: SliceIndex<[T]> | Возвращает изменяемую ссылку на элемент или подсрез |
| 1.0.0 | pub unsafe fn get_unchecked<I>(&self, index: I) -> &<I as SliceIndex<[T]>>::Output where I: SliceIndex<[T]> | Возвращает ссылку на элемент или подсрез без проверки границ |
| 1.0.0 | pub unsafe fn get_unchecked_mut<I>(&mut self, index: I) -> &mut <I as SliceIndex<[T]>>::Output where I: SliceIndex<[T]> | Возвращает изменяемую ссылку на элемент или подсрез без проверки границ |
| 1.0.0 | pub const fn as_ptr(&self) -> *const T | Возвращает необработанный указатель на буфер среза |
| 1.0.0 | pub const fn as_mut_ptr(&mut self) -> *mut T | Возвращает небезопасный изменяемый указатель на буфер среза |
| 1.48.0 | pub const fn as_ptr_range(&self) -> Range<*const T> | Возвращает два необработанных указателя, охватывающих срез |
| 1.48.0 | pub const fn as_mut_ptr_range(&mut self) -> Range<*mut T> | Возвращает два небезопасных изменяемых указателя, охватывающих срез |
| 1.93.0 | pub const fn as_array<const N: usize>(&self) -> Option<&[T; N]> | Получает ссылку на базовый массив |
| 1.93.0 | pub const fn as_mut_array<const N: usize>(&mut self) -> Option<&mut [T; N]> | Получает изменяемую ссылку на базовый массив среза |
| Версия | Метод | Описание |
| 1.0.0 | pub const fn swap(&mut self, a: usize, b: usize) | Меняет местами два элемента в срезе |
| 🔬 | pub const unsafe fn swap_unchecked(&mut self, a: usize, b: usize) | Меняет местами два элемента в срезе без проверки границ |
| 1.0.0 | pub const fn reverse(&mut self) | Изменяет порядок элементов в срезе на противоположный на месте |
| Версия | Метод | Описание |
| 1.0.0 | pub const fn split_at(&self, mid: usize) -> (&[T], &[T]) | Делит один срез на два по индексу |
| 1.0.0 | pub const fn split_at_mut(&mut self, mid: usize) -> (&mut [T], &mut [T]) | Делит один изменяемый срез на два по индексу |
| 1.79.0 | pub const unsafe fn split_at_unchecked(&self, mid: usize) -> (&[T], &[T]) | Делит один срез на два по индексу без проверки границ |
| 1.79.0 | pub const unsafe fn split_at_mut_unchecked(&mut self, mid: usize) -> (&mut [T], &mut [T]) | Делит один изменяемый срез на два по индексу без проверки границ |
| 1.80.0 | pub const fn split_at_checked(&self, mid: usize) -> Option<(&[T], &[T])> | Делит один срез на два по индексу, возвращает None если срез слишком короткий |
| 1.80.0 | pub const fn split_at_mut_checked(&mut self, mid: usize) -> Option<(&mut [T], &mut [T])> | Делит один изменяемый срез на два по индексу, возвращает None если срез слишком короткий |
| 1.0.0 | pub fn split<F>(&self, pred: F) -> Split<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по подрезам, разделённым элементами, которые соответствуют pred |
| 1.0.0 | pub fn split_mut<F>(&mut self, pred: F) -> SplitMut<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred |
| 1.51.0 | pub fn split_inclusive<F>(&self, pred: F) -> SplitInclusive<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, включая разделитель в конец предыдущего подреза |
| 1.51.0 | pub fn split_inclusive_mut<F>(&mut self, pred: F) -> SplitInclusiveMut<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred, включая разделитель |
| 1.27.0 | pub fn rsplit<F>(&self, pred: F) -> RSplit<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, начиная с конца среза |
| 1.27.0 | pub fn rsplit_mut<F>(&mut self, pred: F) -> RSplitMut<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred, начиная с конца среза |
| 1.0.0 | pub fn splitn<F>(&self, n: usize, pred: F) -> SplitN<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, ограниченный возвратом не более n элементов |
| 1.0.0 | pub fn splitn_mut<F>(&mut self, n: usize, pred: F) -> SplitNMut<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по изменяемым подрезам, разделённым элементами, которые соответствуют pred, ограниченный возвратом не более n элементов |
| 1.0.0 | pub fn rsplitn<F>(&self, n: usize, pred: F) -> RSplitN<'_, T, F> where F: FnMut(&T) -> bool | Возвращает итератор по подрезам, разделённым элементами, которые соответствуют pred, ограниченный возвратом не более n элементов, начиная с конца |
| 1.0.0 | pub 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.0 | pub fn contains(&self, x: &T) -> bool where T: PartialEq | Возвращает true, если срез содержит элемент с заданным значением |
| 1.0.0 | pub fn starts_with(&self, needle: &[T]) -> bool where T: PartialEq | Возвращает true, если needle является префиксом среза |
| 1.0.0 | pub fn ends_with(&self, needle: &[T]) -> bool where T: PartialEq | Возвращает true, если needle является суффиксом среза |
| 1.51.0 | pub fn strip_prefix<P>(&self, prefix: &P) -> Option<&[T]> where P: SlicePattern<Item = T> + ?Sized, T: PartialEq | Возвращает подсрез с удалённым префиксом |
| 1.51.0 | pub 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.0 | pub fn binary_search(&self, x: &T) -> Result<usize, usize> where T: Ord | Бинарно ищет в этом срезе заданный элемент |
| 1.0.0 | pub fn binary_search_by<'a, F>(&'a self, f: F) -> Result<usize, usize> where F: FnMut(&'a T) -> Ordering | Бинарно ищет в этом срезе с функцией-компаратором |
| 1.10.0 | pub 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.0 | pub fn partition_point<P>(&self, pred: P) -> usize where P: FnMut(&T) -> bool | Возвращает индекс точки раздела согласно заданному предикату |
| Версия | Метод | Описание |
| 1.0.0 | pub fn sort(&mut self) where T: Ord | Сортирует срез в возрастающем порядке, сохраняя начальный порядок равных элементов (стабильная сортировка) |
| 1.0.0 | pub fn sort_by<F>(&mut self, compare: F) where F: FnMut(&T, &T) -> Ordering | Сортирует срез в возрастающем порядке с функцией сравнения, сохраняя начальный порядок равных элементов |
| 1.7.0 | pub fn sort_by_key<K, F>(&mut self, f: F) where F: FnMut(&T) -> K, K: Ord | Сортирует срез в возрастающем порядке с функцией извлечения ключа, сохраняя начальный порядок равных элементов |
| 1.34.0 | pub fn sort_by_cached_key<K, F>(&mut self, f: F) where F: FnMut(&T) -> K, K: Ord | Сортирует срез в возрастающем порядке с функцией извлечения ключа, сохраняя начальный порядок равных элементов (с кэшированием ключей) |
| 1.20.0 | pub fn sort_unstable(&mut self) where T: Ord | Сортирует срез в возрастающем порядке без сохранения начального порядка равных элементов (нестабильная сортировка) |
| 1.20.0 | pub fn sort_unstable_by<F>(&mut self, compare: F) where F: FnMut(&T, &T) -> Ordering | Сортирует срез в возрастающем порядке с функцией сравнения без сохранения начального порядка равных элементов |
| 1.20.0 | pub fn sort_unstable_by_key<K, F>(&mut self, f: F) where F: FnMut(&T) -> K, K: Ord | Сортирует срез в возрастающем порядке с функцией извлечения ключа без сохранения начального порядка равных элементов |
| Версия | Метод | Описание |
| 1.49.0 | pub fn select_nth_unstable(&mut self, index: usize) -> (&mut [T], &mut T, &mut [T]) where T: Ord | Переупорядочивает срез так, чтобы элемент по индексу находился в позиции порядка сортировки |
| 1.49.0 | pub 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.0 | pub 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.0 | pub const fn rotate_left(&mut self, mid: usize) | Вращает срез на месте так, что первые mid элементов среза перемещаются в конец |
| 1.26.0 | pub const fn rotate_right(&mut self, k: usize) | Вращает срез на месте так, что первые self.len() - k элементов среза перемещаются в конец |
| Версия | Метод | Описание |
| 1.50.0 | pub fn fill(&mut self, value: T) where T: Clone | Заполняет self элементами путём клонирования значения |
| 1.51.0 | pub fn fill_with<F>(&mut self, f: F) where F: FnMut() -> T | Заполняет self элементами, возвращаемыми при многократном вызове замыкания |
| 1.7.0 | pub fn clone_from_slice(&mut self, src: &[T]) where T: Clone | Копирует элементы из src в self |
| 1.9.0 | pub const fn copy_from_slice(&mut self, src: &[T]) where T: Copy | Копирует все элементы из src в self, используя memcpy |
| 1.37.0 | pub fn copy_within<R>(&mut self, src: R, dest: usize) where R: RangeBounds<usize>, T: Copy | Копирует элементы из одной части среза в другую часть самого себя, используя memmove |
| 1.27.0 | pub fn swap_with_slice(&mut self, other: &mut [T]) | Меняет местами все элементы в self с теми, что в other |
| Версия | Метод | Описание |
| 1.30.0 | pub unsafe fn align_to<U>(&self) -> (&[T], &[U], &[T]) | Преобразует срез в срез другого типа, обеспечивая сохранение выравнивания типов |
| 1.30.0 | pub 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.0 | pub fn is_sorted(&self) -> bool where T: PartialOrd | Проверяет, отсортированы ли элементы этого среза |
| 1.82.0 | pub fn is_sorted_by<'a, F>(&'a self, compare: F) -> bool where F: FnMut(&'a T, &'a T) -> bool | Проверяет, отсортированы ли элементы этого среза, используя заданную функцию-компаратор |
| 1.82.0 | pub fn is_sorted_by_key<'a, F, K>(&'a self, f: F) -> bool where F: FnMut(&'a T) -> K, K: PartialOrd | Проверяет, отсортированы ли элементы этого среза, используя заданную функцию извлечения ключа |
| Версия | Метод | Описание |
| 1.87.0 | pub fn split_off<'a, R>(self: &mut &'a [T], range: R) -> Option<&'a [T]> where R: OneSidedRange<usize> | Удаляет подсрез, соответствующий заданному диапазону, и возвращает ссылку на него |
| 1.87.0 | pub fn split_off_mut<'a, R>(self: &mut &'a mut [T], range: R) -> Option<&'a mut [T]> where R: OneSidedRange<usize> | Удаляет подсрез, соответствующий заданному диапазону, и возвращает изменяемую ссылку на него |
| 1.87.0 | pub fn split_off_first<'a>(self: &mut &'a [T]) -> Option<&'a T> | Удаляет первый элемент среза и возвращает ссылку на него |
| 1.87.0 | pub fn split_off_first_mut<'a>(self: &mut &'a mut [T]) -> Option<&'a mut T> | Удаляет первый элемент среза и возвращает изменяемую ссылку на него |
| 1.87.0 | pub fn split_off_last<'a>(self: &mut &'a [T]) -> Option<&'a T> | Удаляет последний элемент среза и возвращает ссылку на него |
| 1.87.0 | pub fn split_off_last_mut<'a>(self: &mut &'a mut [T]) -> Option<&'a mut T> | Удаляет последний элемент среза и возвращает изменяемую ссылку на него |
| Версия | Метод | Описание |
| 1.86.0 | pub 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.0 | pub 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>> | Возвращает диапазон индексов, на которые указывает подсрез |
| Версия | Метод | Описание |
| 🔬 | pub fn align_to_uninit_mut<U>(&mut self) -> (&mut [MaybeUninit<T>], &mut [MaybeUninit<U>], &mut [MaybeUninit<T>]) | Преобразует неинициализированный изменяемый срез в неинициализированный изменяемый срез другого типа, обеспечивая сохранение выравнивания |
| Версия | Метод | Описание |
| 1.80.0 | pub const fn as_flattened(&self) -> &[T] | Берёт &[[T; N]] и преобразует его в &[T] |
| 1.80.0 | pub const fn as_flattened_mut(&mut self) -> &mut [T] | Берёт &mut [[T; N]] и преобразует его в &mut [T] |
| Версия | Метод | Описание |
| 🔬 | pub fn sort_floats(&mut self) | Сортирует срез чисел с плавающей запятой |
| Версия | Метод | Описание |
| 1.79.0 | pub fn utf8_chunks(&self) -> Utf8Chunks<'_> | Создаёт итератор по смежным допустимым диапазонам UTF-8 этого среза и фрагментам не-UTF-8 между ними |
| Версия | Метод | Описание |
| 1.0.0 | pub 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.0 | pub fn into_vec<A>(self: Box<[T], A>) -> Vec<T, A> where A: Allocator | Преобразует self в вектор без клонирования или выделения памяти |
| 1.40.0 | pub fn repeat(&self, n: usize) -> Vec<T> where T: Copy | Создаёт вектор, копируя срез n раз |
| Версия | Метод | Описание |
| 1.0.0 | pub fn concat<Item>(&self) -> <[T] as Concat<Item>>::Output where [T]: Concat<Item>, Item: ?Sized | Преобразует срез T в единое значение Self::Output |
| 1.3.0 | pub fn join<Separator>(&self, sep: Separator) -> <[T] as Join<Separator>>::Output where [T]: Join<Separator> | Преобразует срез T в единое значение Self::Output, размещая заданный разделитель между каждым |
| 1.0.0 | pub fn connect<Separator>(&self, sep: Separator) -> <[T] as Join<Separator>>::Output where [T]: Join<Separator> | Устаревший аналог join |
| Версия | Метод | Описание |
| 1.23.0 | pub fn to_ascii_uppercase(&self) -> Vec<u8> | Возвращает вектор, содержащий копию этого среза, где каждый байт отображён в его эквивалент в верхнем регистре ASCII |
| 1.23.0 | pub fn to_ascii_lowercase(&self) -> Vec<u8> | Возвращает вектор, содержащий копию этого среза, где каждый байт отображён в его эквивалент в нижнем регистре ASCII |
| Тип | Реализация |
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: SimdElement | fn as_mut(&mut self) -> &mut [T] |
impl<T, A> AsMut<[T]> for Vec<T, A> where A: Allocator | fn as_mut(&mut self) -> &mut [T] |
impl AsMut<[u8]> for ByteStr | fn as_mut(&mut self) -> &mut [u8] |
impl AsMut<[u8]> for ByteString | fn as_mut(&mut self) -> &mut [u8] |
| Тип | Реализация |
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: Allocator | fn as_ref(&self) -> &[T] |
impl<T, A> AsRef<[T]> for IntoIter<T, A> where A: Allocator | fn 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: SimdElement | fn as_ref(&self) -> &[T] |
impl<T, A> AsRef<[T]> for Vec<T, A> where A: Allocator | fn as_ref(&self) -> &[T] |
impl AsRef<[u8]> for ByteStr | fn as_ref(&self) -> &[u8] |
impl AsRef<[u8]> for ByteString | fn as_ref(&self) -> &[u8] |
impl<'a> AsRef<[u8]> for Drain<'a> | fn as_ref(&self) -> &[u8] |
impl AsRef<[u8]> for String | fn as_ref(&self) -> &[u8] |
impl AsRef<[u8]> for str | fn as_ref(&self) -> &[u8] |
| Тип | Реализация |
impl AsciiExt for [u8] | type Owned = Vec<u8> |
| Тип | Реализация |
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: Allocator | fn borrow(&self) -> &[T] |
impl Borrow<[u8]> for ByteStr | fn borrow(&self) -> &[u8] |
impl Borrow<[u8]> for ByteString | fn borrow(&self) -> &[u8] |
| Тип | Реализация |
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: Allocator | fn borrow_mut(&mut self) -> &mut [T] |
impl BorrowMut<[u8]> for ByteStr | fn borrow_mut(&mut self) -> &mut [u8] |
impl BorrowMut<[u8]> for ByteString | fn borrow_mut(&mut self) -> &mut [u8] |
| Тип | Реализация |
impl BufRead for &[u8] | fn fill_buf(&mut self) -> Result<&[u8]> |
| Тип | Реализация |
impl<T, A> Clone for Box<[T], A> where T: Clone, A: Allocator + Clone | fn clone(&self) -> Box<[T], A> |
| Тип | Реализация |
impl<T> Debug for [T] where T: Debug | fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> |
| Тип | Реализация |
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]> |
| Тип | Реализация |
impl<T> From<&[T]> for Arc<[T]> where T: Clone | fn from(v: &[T]) -> Arc<[T]> |
impl<T> From<&[T]> for Box<[T]> where T: Clone | fn from(slice: &[T]) -> Box<[T]> |
impl<'a, T> From<&'a [T]> for Cow<'a, [T]> where T: Clone | fn from(s: &'a [T]) -> Cow<'a, [T]> |
impl<T> From<&[T]> for Rc<[T]> where T: Clone | fn from(v: &[T]) -> Rc<[T]> |
impl<T> From<&[T]> for Vec<T> where T: Clone | fn 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: Clone | fn from(v: &mut [T]) -> Arc<[T]> |
impl<T> From<&mut [T]> for Box<[T]> where T: Clone | fn from(slice: &mut [T]) -> Box<[T]> |
impl<T> From<&mut [T]> for Rc<[T]> where T: Clone | fn from(v: &mut [T]) -> Rc<[T]> |
impl<T> From<&mut [T]> for Vec<T> where T: Clone | fn 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: Allocator | fn from(s: Box<str, A>) -> Box<[u8], A> |
impl<T> From<Cow<'_, [T]>> for Box<[T]> where T: Clone | fn from(cow: Cow<'_, [T]>) -> Box<[T]> |
impl<T, A> From<Vec<T, A>> for Box<[T], A> where A: Allocator | fn from(v: Vec<T, A>) -> Box<[T], A> |
| Тип | Реализация |
impl<'a> FromIterator<&'a [u8]> for ByteString | fn 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> |
| Тип | Реализация |
impl<T> Hash for [T] where T: Hash | fn hash<H>(&self, state: &mut H) where H: Hasher |
| Тип | Реализация |
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 |
| Тип | Реализация |
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: Allocator | type 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: Allocator | type Item = &'a mut I; type IntoIter = IterMut<'a, I> |
impl<I, A> IntoIterator for Box<[I], A> where A: Allocator | type Item = I; type IntoIter = IntoIter<I, A> |
| Тип | Реализация |
impl<T> Ord for [T] where T: Ord | fn cmp(&self, other: &[T]) -> Ordering |
| Тип | Реализация |
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> + Clone | 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, A> PartialEq<&[U]> for VecDeque<T, A> where A: Allocator, T: PartialEq<U> | fn eq(&self, other: &&[U]) -> bool |
impl<'a> PartialEq<&[u8]> for ByteStr | fn eq(&self, other: &&[u8]) -> bool |
impl<'a> PartialEq<&[u8]> for ByteString | fn 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> + Clone | fn 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 ByteStr | fn eq(&self, other: &[u8]) -> bool |
impl<'a> PartialEq<[u8]> for ByteString | fn 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 |
| Тип | Реализация |
impl<T> PartialOrd for [T] where T: PartialOrd | fn partial_cmp(&self, other: &[T]) -> Option<Ordering> |
| Тип | Реализация |
impl<'b> Pattern for &'b [char] | type Searcher<'a> = CharSliceSearcher<'a, 'b> |
| Тип | Реализация |
impl Read for &[u8] | fn read(&mut self, buf: &mut [u8]) -> Result<usize> |
| Тип | Реализация |
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 Last | type 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 RangeFull | type 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 usize | type Output = T |
| Тип | Реализация |
impl<T> ToOwned for [T] where T: Clone | type Owned = Vec<T> |
| Тип | Реализация |
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: Copy | type Error = TryFromSliceError |
impl<T, const N: usize> TryFrom<&[T]> for Simd<T, N> where LaneCount<N>: SupportedLaneCount, T: SimdElement | type 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: Copy | type Error = TryFromSliceError |
impl<T, const N: usize> TryFrom<&mut [T]> for Simd<T, N> where LaneCount<N>: SupportedLaneCount, T: SimdElement | type Error = TryFromSliceError |
| Тип | Реализация |
impl Write for &mut [u8] | fn write(&mut self, data: &[u8]) -> Result<usize> |
| Тип | Трейты |
impl<T> Freeze for [T] where T: Freeze | Freeze |
impl<T> RefUnwindSafe for [T] where T: RefUnwindSafe | RefUnwindSafe |
impl<T> Send for [T] where T: Send | Send |
impl<T> !Sized for [T] | !Sized |
impl<T> Sync for [T] where T: Sync | Sync |
impl<T> Unpin for [T] where T: Unpin | Unpin |
impl<T> UnwindSafe for [T] where T: UnwindSafe | UnwindSafe |
| Тип | Трейт |
impl<T> Any for T where T: 'static + ?Sized | Any |
impl<T> Borrow<T> for T where T: ?Sized | Borrow |
impl<T> BorrowMut<T> for T where T: ?Sized | BorrowMut |
Примечание: 🔬 обозначает экспериментальные API, доступные только в ночных сборках Rust.