fn main() {
let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// take and skip
let first3: Vec<_> = data.iter().take(3).collect();
let skip3: Vec<_> = data.iter().skip(3).collect();
println!("{:?}", first3); // [1, 2, 3]
println!("{:?}", skip3); // [4, 5, 6, 7, 8, 9, 10]
// take_while / skip_while
let tw: Vec<_> = data.iter().take_while(|&&x| x < 5).collect();
let sw: Vec<_> = data.iter().skip_while(|&&x| x < 5).collect();
// zip: combine two iterators into pairs
let names = vec!["Alice", "Bob", "Charlie"];
let scores = vec![95, 87, 78];
let combined: Vec<_> = names.iter().zip(scores.iter()).collect();
println!("{:?}", combined);
// enumerate: add index
for (i, name) in names.iter().enumerate() {
println!("{}: {}", i, name);
}
// flat_map: map then flatten
let sentences = vec!["hello world", "foo bar baz"];
let words: Vec<&str> = sentences.iter().flat_map(|s| s.split(' ')).collect();
println!("{:?}", words);
// chain: concatenate iterators
let a = vec![1, 2, 3];
let b = vec![4, 5, 6];
let chained: Vec<_> = a.iter().chain(b.iter()).collect();
println!("{:?}", chained);
// peekable
let mut peekable = data.iter().peekable();
if peekable.peek() == Some(&&1) { println!("starts with 1"); }
println!("next: {:?}", peekable.next());
println!("peek: {:?}", peekable.peek());
}