Trait IntoIterator

1.0.0 ยท Source
pub trait IntoIterator {
    type Item;
    type IntoIter: Iterator<Item = Self::Item>;

    // Required method
    fn into_iter(self) -> Self::IntoIter;
}
Expand description

Conversion into an Iterator.

By implementing IntoIterator for a type, you define how it will be converted to an iterator. This is common for types which describe a collection of some kind.

One benefit of implementing IntoIterator is that your type will work with Rustโ€™s for loop syntax.

See also: FromIterator.

ยงExamples

Basic usage:

let v = [1, 2, 3];
let mut iter = v.into_iter();

assert_eq!(Some(1), iter.next());
assert_eq!(Some(2), iter.next());
assert_eq!(Some(3), iter.next());
assert_eq!(None, iter.next());

Implementing IntoIterator for your type:

// A sample collection, that's just a wrapper over Vec<T>
#[derive(Debug)]
struct MyCollection(Vec<i32>);

// Let's give it some methods so we can create one and add things
// to it.
impl MyCollection {
    fn new() -> MyCollection {
        MyCollection(Vec::new())
    }

    fn add(&mut self, elem: i32) {
        self.0.push(elem);
    }
}

// and we'll implement IntoIterator
impl IntoIterator for MyCollection {
    type Item = i32;
    type IntoIter = std::vec::IntoIter<Self::Item>;

    fn into_iter(self) -> Self::IntoIter {
        self.0.into_iter()
    }
}

// Now we can make a new collection...
let mut c = MyCollection::new();

// ... add some stuff to it ...
c.add(0);
c.add(1);
c.add(2);

// ... and then turn it into an Iterator:
for (i, n) in c.into_iter().enumerate() {
    assert_eq!(i as i32, n);
}

It is common to use IntoIterator as a trait bound. This allows the input collection type to change, so long as it is still an iterator. Additional bounds can be specified by restricting on Item:

fn collect_as_strings<T>(collection: T) -> Vec<String>
where
    T: IntoIterator,
    T::Item: std::fmt::Debug,
{
    collection
        .into_iter()
        .map(|item| format!("{item:?}"))
        .collect()
}

Required Associated Typesยง

1.0.0 ยท Source

type Item

The type of the elements being iterated over.

1.0.0 ยท Source

type IntoIter: Iterator<Item = Self::Item>

Which kind of iterator are we turning this into?

Required Methodsยง

1.0.0 ยท Source

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value.

See the module-level documentation for more.

ยงExamples
let v = [1, 2, 3];
let mut iter = v.into_iter();

assert_eq!(Some(1), iter.next());
assert_eq!(Some(2), iter.next());
assert_eq!(Some(3), iter.next());
assert_eq!(None, iter.next());

Implementorsยง

Sourceยง

impl IntoIterator for IndexVec

Sourceยง

impl IntoIterator for nix::fcntl::AtFlags

Sourceยง

impl IntoIterator for nix::fcntl::FallocateFlags

Sourceยง

impl IntoIterator for FdFlag

Sourceยง

impl IntoIterator for OFlag

Sourceยง

impl IntoIterator for nix::fcntl::RenameFlags

Sourceยง

impl IntoIterator for ResolveFlag

Sourceยง

impl IntoIterator for SealFlag

Sourceยง

impl IntoIterator for MemFdCreateFlag

Sourceยง

impl IntoIterator for SaFlags

Sourceยง

impl IntoIterator for SfdFlags

Sourceยง

impl IntoIterator for nix::sys::stat::Mode

Sourceยง

impl IntoIterator for SFlag

Sourceยง

impl IntoIterator for FsFlags

Sourceยง

impl IntoIterator for WaitPidFlag

Sourceยง

impl IntoIterator for AccessFlags

Sourceยง

impl IntoIterator for regex::regexset::bytes::SetMatches

Sourceยง

impl IntoIterator for regex::regexset::string::SetMatches

Sourceยง

impl IntoIterator for CreateFlags

Sourceยง

impl IntoIterator for ReadFlags

Sourceยง

impl IntoIterator for WatchFlags

Sourceยง

impl IntoIterator for Access

Sourceยง

impl IntoIterator for rustix::backend::fs::types::AtFlags

Sourceยง

impl IntoIterator for rustix::backend::fs::types::FallocateFlags

Sourceยง

impl IntoIterator for MemfdFlags

Sourceยง

impl IntoIterator for rustix::backend::fs::types::Mode

Sourceยง

impl IntoIterator for OFlags

Sourceยง

impl IntoIterator for rustix::backend::fs::types::RenameFlags

Sourceยง

impl IntoIterator for ResolveFlags

Sourceยง

impl IntoIterator for SealFlags

Sourceยง

impl IntoIterator for StatVfsMountFlags

Sourceยง

impl IntoIterator for StatxFlags

Sourceยง

impl IntoIterator for DupFlags

Sourceยง

impl IntoIterator for FdFlags

Sourceยง

impl IntoIterator for ReadWriteFlags

Sourceยง

impl IntoIterator for MountFlags

Sourceยง

impl IntoIterator for MountPropagationFlags

Sourceยง

impl IntoIterator for UnmountFlags

Sourceยง

impl IntoIterator for IFlags

Sourceยง

impl IntoIterator for XattrFlags

Sourceยง

impl IntoIterator for ControlModes

Sourceยง

impl IntoIterator for InputModes

Sourceยง

impl IntoIterator for LocalModes

Sourceยง

impl IntoIterator for OutputModes

Sourceยง

impl IntoIterator for Map<String, Value>

Sourceยง

impl<'a> IntoIterator for &'a Utf8Sequence

1.6.0 ยท Sourceยง

impl<'a> IntoIterator for &'a Path

1.6.0 ยท Sourceยง

impl<'a> IntoIterator for &'a PathBuf

Sourceยง

impl<'a> IntoIterator for &'a Utf8Path

1.10.0 ยท Sourceยง

impl<'a> IntoIterator for &'a UnixListener

Sourceยง

impl<'a> IntoIterator for &'a Params

Sourceยง

impl<'a> IntoIterator for &'a Utf8PathBuf

Sourceยง

impl<'a> IntoIterator for &'a SigSet

Sourceยง

impl<'a> IntoIterator for &'a regex::regexset::bytes::SetMatches

Sourceยง

impl<'a> IntoIterator for &'a regex::regexset::string::SetMatches

Sourceยง

impl<'a> IntoIterator for &'a Map<String, Value>

Sourceยง

impl<'a> IntoIterator for &'a mut Map<String, Value>

Sourceยง

type Item = (&'a String, &'a mut Value)

Sourceยง

type IntoIter = IterMut<'a>

1.80.0 ยท Sourceยง

impl<'a, I, A> IntoIterator for &'a Box<[I], A>
where A: Allocator,

1.80.0 ยท Sourceยง

impl<'a, I, A> IntoIterator for &'a mut Box<[I], A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<'a, K, V, A> IntoIterator for &'a BTreeMap<K, V, A>
where A: Allocator + Clone,

1.0.0 ยท Sourceยง

impl<'a, K, V, A> IntoIterator for &'a mut BTreeMap<K, V, A>
where A: Allocator + Clone,

1.0.0 ยท Sourceยง

impl<'a, K, V, S> IntoIterator for &'a HashMap<K, V, S>

1.0.0 ยท Sourceยง

impl<'a, K, V, S> IntoIterator for &'a mut HashMap<K, V, S>

1.4.0 ยท Sourceยง

impl<'a, T> IntoIterator for &'a Option<T>

1.0.0 ยท Sourceยง

impl<'a, T> IntoIterator for &'a [T]

Sourceยง

impl<'a, T> IntoIterator for &'a std::sync::mpmc::Receiver<T>

1.1.0 ยท Sourceยง

impl<'a, T> IntoIterator for &'a std::sync::mpsc::Receiver<T>

1.4.0 ยท Sourceยง

impl<'a, T> IntoIterator for &'a mut Option<T>

1.0.0 ยท Sourceยง

impl<'a, T> IntoIterator for &'a mut [T]

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a BTreeSet<T, A>
where A: Allocator + Clone,

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a Vec<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a BinaryHeap<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a LinkedList<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a VecDeque<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a mut Vec<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a mut LinkedList<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<'a, T, A> IntoIterator for &'a mut VecDeque<T, A>
where A: Allocator,

1.4.0 ยท Sourceยง

impl<'a, T, E> IntoIterator for &'a Result<T, E>

1.4.0 ยท Sourceยง

impl<'a, T, E> IntoIterator for &'a mut Result<T, E>

Sourceยง

impl<'a, T, N> IntoIterator for &'a GenericArray<T, N>
where T: 'a, N: ArrayLength<T>,

Sourceยง

impl<'a, T, N> IntoIterator for &'a mut GenericArray<T, N>
where T: 'a, N: ArrayLength<T>,

1.0.0 ยท Sourceยง

impl<'a, T, S> IntoIterator for &'a HashSet<T, S>

Sourceยง

impl<'a, T, const CAP: usize> IntoIterator for &'a ArrayVec<T, CAP>
where T: 'a,

Iterate the ArrayVec with references to each element.

use arrayvec::ArrayVec;

let array = ArrayVec::from([1, 2, 3]);

for elt in &array {
    // ...
}
Sourceยง

impl<'a, T, const CAP: usize> IntoIterator for &'a mut ArrayVec<T, CAP>
where T: 'a,

Iterate the ArrayVec with mutable references to each element.

use arrayvec::ArrayVec;

let mut array = ArrayVec::from([1, 2, 3]);

for elt in &mut array {
    // ...
}
1.0.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

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

Sourceยง

impl<'key, V: Keyed<'key>> IntoIterator for Table<'key, V>

Sourceยง

type IntoIter = IntoIter<&'key str, V>

Sourceยง

type Item = (&'key str, V)

Sourceยง

impl<'table, V: Keyed<'table> + 'table> IntoIterator for &'table Table<'table, V>

Sourceยง

type IntoIter = Iter<'table, &'table str, V>

Sourceยง

type Item = (&'table &'table str, &'table V)

Sourceยง

impl<A> IntoIterator for Range<A>
where A: Step,

Sourceยง

impl<A> IntoIterator for RangeFrom<A>
where A: Step,

Sourceยง

impl<A> IntoIterator for RangeInclusive<A>
where A: Step,

1.0.0 ยท Sourceยง

impl<I> IntoIterator for I
where I: Iterator,

1.80.0 ยท Sourceยง

impl<I, A> IntoIterator for Box<[I], A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
where A: Allocator + Clone,

1.0.0 ยท Sourceยง

impl<K, V, S> IntoIterator for HashMap<K, V, S>

1.0.0 ยท Sourceยง

impl<T> IntoIterator for Option<T>

Sourceยง

impl<T> IntoIterator for std::sync::mpmc::Receiver<T>

1.1.0 ยท Sourceยง

impl<T> IntoIterator for std::sync::mpsc::Receiver<T>

1.0.0 ยท Sourceยง

impl<T, A> IntoIterator for BTreeSet<T, A>
where A: Allocator + Clone,

1.0.0 ยท Sourceยง

impl<T, A> IntoIterator for Vec<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<T, A> IntoIterator for BinaryHeap<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<T, A> IntoIterator for LinkedList<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<T, A> IntoIterator for VecDeque<T, A>
where A: Allocator,

1.0.0 ยท Sourceยง

impl<T, E> IntoIterator for Result<T, E>

Sourceยง

impl<T, N> IntoIterator for GenericArray<T, N>
where N: ArrayLength<T>,

1.0.0 ยท Sourceยง

impl<T, S> IntoIterator for HashSet<T, S>

Sourceยง

impl<T, const CAP: usize> IntoIterator for ArrayVec<T, CAP>

Iterate the ArrayVec with each element by value.

The vector is consumed by this operation.

use arrayvec::ArrayVec;

for elt in ArrayVec::from([1, 2, 3]) {
    // ...
}
1.53.0 ยท Sourceยง

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