[−][src]Trait arraylib::ArrayExt
Extension on arrays that provide additional functions.
Provided methods
fn iter_move(self) -> IterMove<Self>
Creates iterator which moves elements out of array.
See also: IterMove
fn concat_arr<A, R>(self, other: A) -> R where
A: Array<Item = Self::Item>,
R: Array<Item = Self::Item>,
A: Array<Item = Self::Item>,
R: Array<Item = Self::Item>,
Example
use arraylib::ArrayExt; let arr: [_; 6] = [1, 2, 3].concat_arr([4, 5, 6]); assert_eq!(arr, [1, 2, 3, 4, 5, 6])
Panics
Panics if Self::SIZE
+ A::SIZE
!= R::SIZE
:
use arraylib::ArrayExt; let arr: [_; 4] = [1, 2, 3].concat_arr([4, 5, 6]);
fn split_arr<A, B>(self) -> (A, B) where
A: Array<Item = Self::Item>,
B: Array<Item = Self::Item>,
A: Array<Item = Self::Item>,
B: Array<Item = Self::Item>,
Splits self into 2 arrays
Example
use arraylib::ArrayExt; let arr = [1, 2, 3, 4, 5]; let (head, tail) = arr.split_arr::<[_; 2], [_; 3]>(); assert_eq!(head, [1, 2]); assert_eq!(tail, [3, 4, 5]);
fn into_array<A>(self) -> Result<A, SizeError<Self>> where
A: Array<Item = Self::Item>,
A: Array<Item = Self::Item>,
Converts self
into an array. This function will return Some(_)
if
sizes of Self
and A
are the same and None
otherwise.
Example
use arraylib::{Array, ArrayExt}; fn function_optimized_for_8(_: [i32; 8]) { /* ... */ } fn general<A>(array: A) where A: Array<Item = i32>, { match array.into_array::<[i32; 8]>() { Ok(array) => function_optimized_for_8(array), Err(array) => { /* here `array` is of type `A` */ }, } }
fn to_vec(&self) -> Vec<Self::Item> where
Self::Item: Clone,
Self::Item: Clone,
Copies self
into a new Vec
.
Examples
use arraylib::{Array, ArrayExt}; fn generic<A>(arr: A) where A: Array, A::Item: Clone, { let x = arr.to_vec(); // Here, `arr` and `x` can be modified independently. }
See also: [T]::to_vec
fn into_vec(self) -> Vec<Self::Item>
Converts self
into a vector without clones.
The resulting vector can be converted back into a box via
Vec<T>
's into_boxed_slice
method.
Examples
use arraylib::ArrayExt; let s = [10, 40, 30]; let x = s.into_vec(); // `s` cannot be used anymore because it has been converted into `x`. assert_eq!(x, vec![10, 40, 30]);
See also: [T]::in to_vec
fn from_slice(slice: &[Self::Item]) -> Result<Self, SizeError> where
Self::Item: Copy,
Self::Item: Copy,
Create array from slice. Return Err(())
if slice.len != Self::SIZE
.
Examples
use arraylib::ArrayExt; let slice = &[1, 2, 3]; let arr = <[i32; 3]>::from_slice(slice); assert_eq!(arr, Ok([1, 2, 3]));
let slice = &[1, 2, 3, 4]; let arr = <[i32; 2]>::from_slice(slice); // ^^^^^^ ---- wrong size, slice len = 4, arr len = 2 assert_eq!(arr, Err(SizeError::Greater(2, ())));
fn clone_from_slice(slice: &[Self::Item]) -> Result<Self, SizeError> where
Self::Item: Clone,
Self::Item: Clone,
Create array from slice. Return Err(())
if slice.len != Self::SIZE
.
Same as from_slice
, but doesn't require
items to be Copy
, instead only require elements to be Clone
Examples
use arraylib::ArrayExt; let slice = &[String::from("hi"), 123.to_string(), String::new()]; let arr = <[String; 3]>::clone_from_slice(slice); assert_eq!( arr, Ok([String::from("hi"), 123.to_string(), String::new()]) );
fn wrap(self) -> ArrayWrapper<Self>
Wrap self
into ArrayWrapper