Iterators
Map and Filter
Transforming a Sequence
Iterator adaptors build a pipeline. filter keeps matching items and map transforms them before collect.
Program
Play the program to keep even numbers and scale them.
map_filter.rs
Replay: real traced execution (multi-file project)
fn main() {
let nums = vec![1, 2, 3, 4, 5];
let doubled_evens: Vec<i32> = nums.iter().filter(|&&n| n % 2 == 0).map(|&n| n * 10).collect();
println!("{doubled_evens:?}");
}
nums ← [1, 2, 3, 4, 5], doubled_evens ← [20, 40]
1fn main() {2 let num→ [1, 2, 3, 4, 5]s = vec![1, 2, 3, 4, 5];3 let doubled_even→ [20, 40]s: Vec<i32> = nums.iter().filter(|&&n| n % 2 == 0).map(|&n| n * 10).collect();4 println!("{doubled_evens:?}");5}output[20, 40]
Follow the Iterator
numsstarts as[1, 2, 3, 4, 5].filterkeeps only the even values:2and4.mapmultiplies each kept value by10.collectgathers the transformed values into[20, 40].- The program prints
[20, 40]. | number | filter result | mapped value | | --- | --- | --- | | 1 | drop | - | | 2 | keep | 20 | | 3 | drop | - | | 4 | keep | 40 | | 5 | drop | - |
filter
`filter` keeps items where the predicate is true.
map
`map` transforms each remaining item.
collect
`collect` gathers the results into a `Vec`.
Exercise: map_filter.rs
Reproduce the output [20, 40], then trace which numbers are dropped and which numbers become 20 and 40.