zip, unzip y partition en Rust
Emparejar dos streams, separar los pares, dividir un stream en dos.
fn main() {
let names = ["ada", "grace", "alan"];
let stars = [3, 2, 1];
let paired: Vec<(&&str, &i32)> = names.iter().zip(stars.iter()).collect();
println!("{:?}", paired);
let (who, score): (Vec<&str>, Vec<i32>) =
names.iter().copied().zip(stars.iter().copied()).unzip();
println!("{:?} {:?}", who, score);
let (pass, fail): (Vec<i32>, Vec<i32>) =
(1..=10).partition(|n| n % 3 == 0);
println!("{:?} {:?}", pass, fail);
}
Cómo funciona
zipse detiene cuando el lado más corto se agota.unzipnecesita los tipos destino anotados.partitiondivide según un predicado en dos colecciones.
Palabras clave y builtins usados aquí
Vecfni32letstr
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 425
- Tokens
- 184
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 116 segundos.
Paso 5 de 5 en Adaptadores; paso 5 de 14 en Iteradores y closures.