WeCodeAcademy

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.