Rust Iterators
Iterators process sequences lazily with methods such as map, filter and sum. Nothing runs until you consume the iterator, for example with collect.
ExampleRust
fn main() {
let nums = vec![1, 2, 3, 4, 5, 6];
let evens: Vec<i32> = nums.iter().filter(|&&n| n % 2 == 0).cloned().collect();
println!("{:?}", evens);
let squares: Vec<i32> = nums.iter().map(|n| n * n).collect();
println!("{:?}", squares);
let total: i32 = nums.iter().sum();
println!("{}", total);
println!("{:?}", nums.iter().position(|&n| n == 4));
println!("{}", nums.iter().any(|&n| n > 5));
let words = vec!["apple", "bob", "cat"];
for (i, w) in words.iter().enumerate() {
println!("{} {}", i, w);
}
let joined: String = words.iter().map(|w| w.to_uppercase()).collect::<Vec<_>>().join("-");
println!("{}", joined);
println!("{:?}", (1..=5).rev().collect::<Vec<_>>());
}Output
[2, 4, 6] [1, 4, 9, 16, 25, 36] 21 Some(3) true 0 apple 1 bob 2 cat APPLE-BOB-CAT [5, 4, 3, 2, 1]
Quick check
When does a chain of iterator adaptors like map actually run?
Finish the quick check (and any code exercise) to complete this lesson, or mark it done yourself.
Tip: use the left and right arrow keys to move between lessons.