pub trait SliceOwned: Slice {
// Required method
fn get_owned(&self, index: usize) -> Option<Self::Output>;
// Provided methods
fn array_chunks<const N: usize>(self) -> ArrayChunksOwned<Self, N> ⓘ
where Self: Sized { ... }
fn array_windows<const N: usize>(self) -> ArrayWindowsOwned<Self, N> ⓘ
where Self: Sized { ... }
fn chunks(&self, size: usize) -> ChunksOwned<'_, Self> ⓘ { ... }
fn map<F: Fn(Self::Output) -> R, R>(self, f: F) -> MapOwned<Self, F>
where Self: Sized { ... }
fn iter(self) -> IterOwned<Self> ⓘ
where Self: Sized { ... }
fn try_array<const N: usize>(&self) -> Option<[Self::Output; N]> { ... }
fn windows(&self, size: usize) -> WindowsOwned<'_, Self> ⓘ { ... }
fn zip<O: SliceOwned>(self, other: O) -> Zip<Self, O>
where Self: Sized { ... }
}
Expand description
A Slice
that can return owned values.
Required Methods§
Provided Methods§
Sourcefn array_chunks<const N: usize>(self) -> ArrayChunksOwned<Self, N> ⓘwhere
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunksOwned<Self, N> ⓘwhere
Self: Sized,
Return an iterator over arrays covering consecutive portions of the slice.
Analagous to [slice::array_chunks
].
§Panics
If N == 0
, panics.
§Examples
let slice = [1, 2, 3, 4, 5];
let mut iter = slice.array_chunks::<2>();
assert_eq!(iter.next(), Some([1, 2]));
assert_eq!(iter.next(), Some([3, 4]));
assert!(iter.next().is_none());
assert_eq!(iter.remainder(), [5]);
Sourcefn array_windows<const N: usize>(self) -> ArrayWindowsOwned<Self, N> ⓘwhere
Self: Sized,
fn array_windows<const N: usize>(self) -> ArrayWindowsOwned<Self, N> ⓘwhere
Self: Sized,
Return a slice/iterator over arrays covering overlapping portions of the slice.
Analagous to slice::array_windows
.
§Panics
If N == 0
, panics.
§Examples
let slice = [1, 2, 3, 4, 5];
let mut windows = slice.array_windows::<3>();
assert_eq!(windows.next(), Some([1, 2, 3]));
assert_eq!(windows.next(), Some([2, 3, 4]));
assert_eq!(windows.next(), Some([3, 4, 5]));
assert!(windows.next().is_none());
assert_eq!(windows.get_owned(1), Some([2, 3, 4]));
Sourcefn chunks(&self, size: usize) -> ChunksOwned<'_, Self> ⓘ
fn chunks(&self, size: usize) -> ChunksOwned<'_, Self> ⓘ
Return an iterator over slices covering consecutive portions of the slice.
Analagous to slice::chunks
.
§Panics
If size == 0
, panics.
§Examples
let slice = [1, 2, 3, 4, 5];
let mut iter = slice.chunks(2);
assert_eq!(iter.next().unwrap(), [1, 2]);
assert_eq!(iter.next().unwrap(), [3, 4]);
assert_eq!(iter.next().unwrap(), [5]);
assert!(iter.next().is_none());
Sourcefn map<F: Fn(Self::Output) -> R, R>(self, f: F) -> MapOwned<Self, F>where
Self: Sized,
fn map<F: Fn(Self::Output) -> R, R>(self, f: F) -> MapOwned<Self, F>where
Self: Sized,
Call a closure on index, returning a new type.
Analagous to Iterator::map
.
§Examples
let slice = [0, 1, 2].map(|x| x != 0);
assert_eq!(slice, [false, true, true]);
Sourcefn iter(self) -> IterOwned<Self> ⓘwhere
Self: Sized,
fn iter(self) -> IterOwned<Self> ⓘwhere
Self: Sized,
Creates an iterator over the slice.
§Examples
let slice = [1, 2].chain([3]);
let mut iter = slice.iter();
assert_eq!(iter.next(), Some(1));
assert_eq!(iter.next(), Some(2));
assert_eq!(iter.next(), Some(3));
assert!(iter.next().is_none());
Sourcefn try_array<const N: usize>(&self) -> Option<[Self::Output; N]>
fn try_array<const N: usize>(&self) -> Option<[Self::Output; N]>
Try to collect the slice into an array, failing if the lengths don’t match up.
§Examples
let slice = [1, 2, 3].map(|i| i * i);
let arr: [i32; 3] = slice.try_array().unwrap();
assert_eq!(arr, [1, 4, 9]);
Sourcefn windows(&self, size: usize) -> WindowsOwned<'_, Self> ⓘ
fn windows(&self, size: usize) -> WindowsOwned<'_, Self> ⓘ
Return a slice/iterator over slices covering overlapping portions of the slice.
Analagous to slice::windows
.
§Panics
If size == 0
, panics.
§Examples
let slice = [1, 2, 3, 4, 5];
let mut windows = slice.windows(3);
assert_eq!(windows.next().unwrap(), [1, 2, 3]);
assert_eq!(windows.next().unwrap(), [2, 3, 4]);
assert_eq!(windows.next().unwrap(), [3, 4, 5]);
assert!(windows.next().is_none());
assert_eq!(windows.get_owned(1).unwrap(), [2, 3, 4]);
Sourcefn zip<O: SliceOwned>(self, other: O) -> Zip<Self, O>where
Self: Sized,
fn zip<O: SliceOwned>(self, other: O) -> Zip<Self, O>where
Self: Sized,
Zip two slices into a single slice, where indexing returns a tuple of their items.
Analagous to Iterator::zip
.
§Examples
let a = [1, 2, 3];
let b = [4, 5, 6, 7];
let slice = a.zip(b);
assert_eq!(
slice,
[
(1, 4),
(2, 5),
(3, 6),
]
);
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.