1.0.0[]Primitive Type array

A fixed-size array, denoted [T; N], for the element type, T, and the non-negative compile-time constant size, N.

There are two syntactic forms for creating an array:

Arrays of any size implement the following traits if the element type allows it:

Arrays of sizes from 0 to 32 (inclusive) implement Default trait if the element type allows it. As a stopgap, trait implementations are statically generated up to size 32.

Arrays of any size are Copy if the element type is Copy and Clone if the element type is Clone. This works because Copy and Clone traits are specially known to the compiler.

Arrays coerce to slices ([T]), so a slice method may be called on an array. Indeed, this provides most of the API for working with arrays. Slices have a dynamic size and do not coerce to arrays.

You can move elements out of an array with a slice pattern. If you want one element, see mem::replace.

Examples

let mut array: [i32; 3] = [0; 3];

array[1] = 1;
array[2] = 2;

assert_eq!([1, 2], &array[1..]);

// This loop prints: 0 1 2
for x in &array {
    print!("{} ", x);
}
Run

An array itself is not iterable:

This example deliberately fails to compile
let array: [i32; 3] = [0; 3];

for x in array { }
// error: the trait bound `[i32; 3]: std::iter::Iterator` is not satisfied
Run

The solution is to coerce the array to a slice by calling a slice method:

for x in array.iter() { }
Run

You can also use the array reference's IntoIterator implementation:

for x in &array { }
Run

You can use a slice pattern to move elements out of an array:

fn move_away(_: String) { /* Do interesting things. */ }

let [john, roa] = ["John".to_string(), "Roa".to_string()];
move_away(john);
move_away(roa);
Run

Implementations

impl<T, const N: usize> [T; N][src]

pub fn map<F, U>(self, f: F) -> [U; N] where
    F: FnMut(T) -> U, 
[src]

🔬 This is a nightly-only experimental API. (array_map #75243)

Returns an array of the same size as self, with function f applied to each element in order.

Examples

#![feature(array_map)]
let x = [1, 2, 3];
let y = x.map(|v| v + 1);
assert_eq!(y, [2, 3, 4]);

let x = [1, 2, 3];
let mut temp = 0;
let y = x.map(|v| { temp += 1; v * temp });
assert_eq!(y, [1, 4, 9]);

let x = ["Ferris", "Bueller's", "Day", "Off"];
let y = x.map(|v| v.len());
assert_eq!(y, [6, 9, 3, 3]);
Run

Trait Implementations

impl<T, const N: usize> AsMut<[T]> for [T; N][src]

impl<T, const N: usize> AsRef<[T]> for [T; N][src]

impl<T, const N: usize> Borrow<[T]> for [T; N]1.4.0[src]

impl<T, const N: usize> BorrowMut<[T]> for [T; N]1.4.0[src]

impl<T, const N: usize> Debug for [T; N] where
    T: Debug
[src]

impl<T> Default for [T; 21] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 20] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 32] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 31] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 13] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 30] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 22] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 9] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 6] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 8] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 1] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 2] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 17] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 7] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 10] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 12] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 5] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 3] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 11] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 4] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 23] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 18] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 25] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 29] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 28] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 27] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 24] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 26] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 0]1.4.0[src]

impl<T> Default for [T; 14] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 15] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 16] where
    T: Default
1.4.0[src]

impl<T> Default for [T; 19] where
    T: Default
1.4.0[src]

impl<T, const N: usize> Eq for [T; N] where
    T: Eq
[src]

impl<T, const N: usize> Hash for [T; N] where
    T: Hash
[src]

impl<'a, T, const N: usize> IntoIterator for &'a [T; N][src]

type Item = &'a T

The type of the elements being iterated over.

type IntoIter = Iter<'a, T>

Which kind of iterator are we turning this into?

impl<'a, T, const N: usize> IntoIterator for &'a mut [T; N][src]

type Item = &'a mut T

The type of the elements being iterated over.

type IntoIter = IterMut<'a, T>

Which kind of iterator are we turning this into?

impl<T, const N: usize> Ord for [T; N] where
    T: Ord
[src]

Implements comparison of arrays lexicographically.

impl<'b, A, B, const N: usize> PartialEq<&'b [B]> for [A; N] where
    A: PartialEq<B>, 
[src]

impl<'b, A, B, const N: usize> PartialEq<&'b mut [B]> for [A; N] where
    A: PartialEq<B>, 
[src]

impl<A, B, const N: usize> PartialEq<[B; N]> for [A; N] where
    A: PartialEq<B>, 
[src]

impl<A, B, const N: usize> PartialEq<[B]> for [A; N] where
    A: PartialEq<B>, 
[src]

impl<T, const N: usize> PartialOrd<[T; N]> for [T; N] where
    T: PartialOrd<T>, 
[src]

impl<'_, T, const N: usize> TryFrom<&'_ [T]> for [T; N] where
    T: Copy
1.34.0[src]

type Error = TryFromSliceError

The type returned in the event of a conversion error.

impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N]1.34.0[src]

type Error = TryFromSliceError

The type returned in the event of a conversion error.

impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N]1.34.0[src]

type Error = TryFromSliceError

The type returned in the event of a conversion error.

Auto Trait Implementations

impl<T, const N: usize> RefUnwindSafe for [T; N] where
    T: RefUnwindSafe

impl<T, const N: usize> Send for [T; N] where
    T: Send

impl<T, const N: usize> Sync for [T; N] where
    T: Sync

impl<T, const N: usize> Unpin for [T; N] where
    T: Unpin

impl<T, const N: usize> UnwindSafe for [T; N] where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T, A> FixedSizeArray<T> for A where
    A: Unsize<[T]>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.