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
filter_mapconserva cadaSomeque devuelve el closure.flat_mapmapea a iteradores y los concatena.flattenhace lo mismo con un iterador de colecciones.
Palabras clave y builtins usados aquí
Vecfni32letstr
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.
Paso 4 de 5 en Adaptadores; paso 4 de 14 en Iteradores y closures.