typestar

filter_map y flat_map en Rust

Mapear y filtrar en una sola pasada, y aplanar estructura anidada.

fn main() {
    let raw = ["3", "x", "7", "", "12"];

    let nums: Vec<i32> = raw
        .iter()
        .filter_map(|s| s.parse().ok())
        .collect();
    println!("{:?}", nums);

    let words = ["hot key", "cold start"];
    let parts: Vec<&str> = words
        .iter()
        .flat_map(|line| line.split(' '))
        .collect();
    println!("{:?}", parts);

    let nested = vec![vec![1, 2], vec![3], vec![]];
    println!("{:?}", nested.into_iter().flatten().collect::<Vec<i32>>());
}

Cómo funciona

  1. filter_map conserva cada Some que devuelve el closure.
  2. flat_map mapea a iteradores y los concatena.
  3. flatten hace lo mismo con un iterador de colecciones.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
419
Tokens
178
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 112 segundos.

Escribe este fragmento

Paso 4 de 5 en Adaptadores; paso 4 de 14 en Iteradores y closures.

← Anterior Siguiente →