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
.
Basic usage:
let v = vec![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:
#[derive(Debug)]
struct MyCollection(Vec<i32>);
impl MyCollection {
fn new() -> MyCollection {
MyCollection(Vec::new())
}
fn add(&mut self, elem: i32) {
self.0.push(elem);
}
}
impl IntoIterator for MyCollection {
type Item = i32;
type IntoIter = std::vec::IntoIter<Self::Item>;
fn into_iter(self) -> Self::IntoIter {
self.0.into_iter()
}
}
let mut c = MyCollection::new();
c.add(0);
c.add(1);
c.add(2);
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()
}
The type of the elements being iterated over.
Which kind of iterator are we turning this into?
Creates an iterator from a value.
See the module-level documentation for more.
Basic usage:
let v = vec![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());
impl<'a> IntoIterator for &'a Path
[src][−]
impl<'a, T> IntoIterator for &'a Receiver<T>
[src][−]
impl<'a> IntoIterator for &'a PathBuf
[src][−]
impl<T> IntoIterator for Receiver<T>
[src][−]
impl<'a, T> IntoIterator for &'a mut [T]
[src][−]
impl<'a, T, const N: usize> IntoIterator for &'a [T; N]
[src][−]
impl<'a, T> IntoIterator for &'a [T]
[src][−]
impl<'a, T, const N: usize> IntoIterator for &'a mut [T; N]
[src][−]
impl<'a, K, V> IntoIterator for &'a BTreeMap<K, V>
[src][+]
impl<'a, K, V> IntoIterator for &'a mut BTreeMap<K, V>
[src][+]
impl<'a, K, V, S> IntoIterator for &'a HashMap<K, V, S>
[src][+]
impl<'a, K, V, S> IntoIterator for &'a mut HashMap<K, V, S>
[src][+]
impl<'a, T> IntoIterator for &'a Option<T>
[src][+]
impl<'a, T> IntoIterator for &'a BTreeSet<T>
[src][+]
impl<'a, T> IntoIterator for &'a BinaryHeap<T>
[src][+]
impl<'a, T> IntoIterator for &'a LinkedList<T>
[src][+]
impl<'a, T> IntoIterator for &'a VecDeque<T>
[src][+]
impl<'a, T> IntoIterator for &'a Vec<T>
[src][+]
impl<'a, T> IntoIterator for &'a mut Option<T>
[src][+]
impl<'a, T> IntoIterator for &'a mut LinkedList<T>
[src][+]
impl<'a, T> IntoIterator for &'a mut VecDeque<T>
[src][+]
impl<'a, T> IntoIterator for &'a mut Vec<T>
[src][+]
impl<'a, T, E> IntoIterator for &'a Result<T, E>
[src][+]
impl<'a, T, E> IntoIterator for &'a mut Result<T, E>
[src][+]
impl<'a, T, S> IntoIterator for &'a HashSet<T, S>
[src][+]
impl<I> IntoIterator for I where
I: Iterator,
[src][+]
impl<K, V> IntoIterator for BTreeMap<K, V>
[src][+]
impl<K, V, S> IntoIterator for HashMap<K, V, S>
[src][+]
type Item = (K, V)
type IntoIter = IntoIter<K, V>
fn into_iter(self) -> IntoIter<K, V>ⓘ
[src][−]
Creates a consuming iterator, that is, one that moves each key-value
pair out of the map in arbitrary order. The map cannot be used after
calling this.
use std::collections::HashMap;
let mut map = HashMap::new();
map.insert("a", 1);
map.insert("b", 2);
map.insert("c", 3);
let vec: Vec<(&str, i32)> = map.into_iter().collect();
impl<T> IntoIterator for Option<T>
[src][+]
type Item = T
type IntoIter = IntoIter<T>
fn into_iter(self) -> IntoIter<T>ⓘ
[src][−]
Returns a consuming iterator over the possibly contained value.
let x = Some("string");
let v: Vec<&str> = x.into_iter().collect();
assert_eq!(v, ["string"]);
let x = None;
let v: Vec<&str> = x.into_iter().collect();
assert!(v.is_empty());
impl<T> IntoIterator for BTreeSet<T>
[src][+]
type Item = T
type IntoIter = IntoIter<T>
fn into_iter(self) -> IntoIter<T>ⓘ
[src][−]
Gets an iterator for moving out the BTreeSet
's contents.
use std::collections::BTreeSet;
let set: BTreeSet<usize> = [1, 2, 3, 4].iter().cloned().collect();
let v: Vec<_> = set.into_iter().collect();
assert_eq!(v, [1, 2, 3, 4]);
impl<T> IntoIterator for BinaryHeap<T>
[src][+]
type Item = T
type IntoIter = IntoIter<T>
fn into_iter(self) -> IntoIter<T>ⓘ
[src][−]
Creates a consuming iterator, that is, one that moves each value out of
the binary heap in arbitrary order. The binary heap cannot be used
after calling this.
Basic usage:
use std::collections::BinaryHeap;
let heap = BinaryHeap::from(vec![1, 2, 3, 4]);
for x in heap.into_iter() {
println!("{}", x);
}
impl<T> IntoIterator for LinkedList<T>
[src][+]
impl<T> IntoIterator for VecDeque<T>
[src][+]
impl<T> IntoIterator for Vec<T>
[src][+]
type Item = T
type IntoIter = IntoIter<T>
fn into_iter(self) -> IntoIter<T>ⓘ
[src][−]
Creates a consuming iterator, that is, one that moves each value out of
the vector (from start to end). The vector cannot be used after calling
this.
let v = vec!["a".to_string(), "b".to_string()];
for s in v.into_iter() {
println!("{}", s);
}
impl<T, E> IntoIterator for Result<T, E>
[src][+]
type Item = T
type IntoIter = IntoIter<T>
fn into_iter(self) -> IntoIter<T>ⓘ
[src][−]
Returns a consuming iterator over the possibly contained value.
The iterator yields one value if the result is Result::Ok
, otherwise none.
Basic usage:
let x: Result<u32, &str> = Ok(5);
let v: Vec<u32> = x.into_iter().collect();
assert_eq!(v, [5]);
let x: Result<u32, &str> = Err("nothing!");
let v: Vec<u32> = x.into_iter().collect();
assert_eq!(v, []);
impl<T, S> IntoIterator for HashSet<T, S>
[src][+]
type Item = T
type IntoIter = IntoIter<T>
fn into_iter(self) -> IntoIter<T>ⓘ
[src][−]
Creates a consuming iterator, that is, one that moves each value out
of the set in arbitrary order. The set cannot be used after calling
this.
use std::collections::HashSet;
let mut set = HashSet::new();
set.insert("a".to_string());
set.insert("b".to_string());
let v: Vec<String> = set.into_iter().collect();
for x in &v {
println!("{}", x);
}
impl<'a, A: Array> IntoIterator for &'a ArrayVec<A>
| |
impl<'a, A: Array> IntoIterator for &'a mut ArrayVec<A>
| |
impl<A: Array> IntoIterator for ArrayVec<A>
| |
impl<'a, T> IntoIterator for &'a Receiver<T>
| |
impl<T> IntoIterator for Receiver<T>
| |
impl IntoIterator for BitSet
| |
impl<'a> IntoIterator for &'a BitSet
| |
impl IntoIterator for AtomicBitSet
| |
impl<'a> IntoIterator for &'a AtomicBitSet
| |
impl<A> IntoIterator for BitSetNot<A> where A: BitSetLike,
| |
impl<'a, A> IntoIterator for &'a BitSetNot<A> where A: BitSetLike,
| |
impl<A, B> IntoIterator for BitSetAnd<A, B> where A: BitSetLike, B: BitSetLike,
| |
impl<'a, A, B> IntoIterator for &'a BitSetAnd<A, B> where A: BitSetLike, B: BitSetLike,
| |
impl<A, B> IntoIterator for BitSetOr<A, B> where A: BitSetLike, B: BitSetLike,
| |
impl<'a, A, B> IntoIterator for &'a BitSetOr<A, B> where A: BitSetLike, B: BitSetLike,
| |
impl<A, B> IntoIterator for BitSetXor<A, B> where A: BitSetLike, B: BitSetLike,
| |
impl<'a, A, B> IntoIterator for &'a BitSetXor<A, B> where A: BitSetLike, B: BitSetLike,
| |
impl IntoIterator for BitSetAll
| |
impl<'a> IntoIterator for &'a BitSetAll
| |
impl<'a, K: Hash + Eq, V, S: BuildHasher> IntoIterator for &'a LinkedHashMap<K, V, S>
| |
impl<'a, K: Hash + Eq, V, S: BuildHasher> IntoIterator for &'a mut LinkedHashMap<K, V, S>
| |
impl<K: Hash + Eq, V, S: BuildHasher> IntoIterator for LinkedHashMap<K, V, S>
| |
impl<'a> IntoIterator for &'a Events
| |
impl IntoIterator for Events
| |
impl<'a, T, S> IntoIterator for &'a OrderSet<T, S> where T: Hash + Eq, S: BuildHasher,
| |
impl<T, S> IntoIterator for OrderSet<T, S> where T: Hash + Eq, S: BuildHasher,
| |
impl<'a, K, V, S> IntoIterator for &'a OrderMap<K, V, S> where K: Hash + Eq, S: BuildHasher,
| |
impl<'a, K, V, S> IntoIterator for &'a mut OrderMap<K, V, S> where K: Hash + Eq, S: BuildHasher,
| |
impl<K, V, S> IntoIterator for OrderMap<K, V, S> where K: Hash + Eq, S: BuildHasher,
| |
impl IntoIterator for TokenStream
| |
impl<'a> IntoIterator for &'a DescriptorRanges
| |
impl<'a> IntoIterator for &'a Map<String, Value>
| |
impl<'a> IntoIterator for &'a mut Map<String, Value>
| |
impl IntoIterator for Map<String, Value>
| |
impl<'a, T> IntoIterator for &'a Slab<T>
| |
impl<'a, T> IntoIterator for &'a mut Slab<T>
| |
impl<A: Array> IntoIterator for SmallVec<A>
| |
impl<'a, A: Array> IntoIterator for &'a SmallVec<A>
| |
impl<'a, A: Array> IntoIterator for &'a mut SmallVec<A>
| |
impl IntoIterator for Fields
| |
impl<'a> IntoIterator for &'a Fields
| |
impl<'a> IntoIterator for &'a mut Fields
| |
impl<T, P> IntoIterator for Punctuated<T, P>
| |
impl<'a, T, P> IntoIterator for &'a Punctuated<T, P>
| |
impl<'a, T, P> IntoIterator for &'a mut Punctuated<T, P>
| |
impl IntoIterator for Error
| |
impl<'a> IntoIterator for &'a Error
| |
impl<'a> IntoIterator for &'a FieldSet
| |
impl IntoIterator for WalkDir
| |
impl<'a> IntoIterator for &'a Namespace
| |
impl<'a> IntoIterator for &'a NamespaceStack
| |
impl<R: Read> IntoIterator for EventReader<R>
| |