Rust

zip / enumerate / chain

admin by @admin ADMIN
Jun 17, 2026
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Three adapters that pair, index, and concatenate iterators. Every Rust developer reaches for them daily.
Rust
Raw
fn main() {
    let names = vec!["Alice", "Bob", "Cara"];
    let ages  = vec![30, 25, 35];

    // zip — pair two iterators (stops at the shorter one)
    let paired: Vec<(&&str, &i32)> = names.iter().zip(ages.iter()).collect();
    for (n, a) in &paired { println!("{n} is {a}"); }

    // enumerate — get (index, value) pairs
    for (i, name) in names.iter().enumerate() {
        println!("{i}: {name}");
    }

    // chain — concatenate two iterators
    let a = vec![1, 2, 3];
    let b = vec![4, 5, 6];
    let all: Vec<i32> = a.iter().chain(b.iter()).copied().collect();
    println!("{all:?}");                              // [1, 2, 3, 4, 5, 6]

    // unzip — split a Vec<(A,B)> into (Vec<A>, Vec<B>)
    let pairs = vec![(1, 'a'), (2, 'b'), (3, 'c')];
    let (ints, chars): (Vec<i32>, Vec<char>) = pairs.into_iter().unzip();
    println!("{ints:?} {chars:?}");
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.