Puentear un iterador en serie en Rust
par_bridge paraleliza cualquier iterador, incluso uno que no puede dividirse.
use rayon::prelude::*;
fn score(word: &str) -> usize {
word.chars().filter(|c| "aeiou".contains(*c)).count()
}
fn main() {
let text = "practice makes the difference between typing and thinking";
let mut scored: Vec<(usize, &str)> = text
.split_whitespace()
.par_bridge()
.map(|word| (score(word), word))
.collect();
scored.sort_by(|a, b| b.0.cmp(&a.0).then(a.1.cmp(b.1)));
println!("{:?}", &scored[..3]);
println!("total vowels {}", scored.iter().map(|s| s.0).sum::<usize>());
}
Cómo funciona
par_bridgealimenta el pool con los elementos según se producen.- El orden no se conserva: colecta en un conjunto u ordena después.
- Sirve para líneas de un reader o valores de un generador.
Palabras clave y builtins usados aquí
Vecfnletmutstruseusize
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 482
- Tokens
- 181
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 99 segundos.
Paso 3 de 3 en Repartir trabajo; paso 8 de 9 en Paralelismo de datos con rayon.