typestar

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

  1. par_bridge alimenta el pool con los elementos según se producen.
  2. El orden no se conserva: colecta en un conjunto u ordena después.
  3. Sirve para líneas de un reader o valores de un generador.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Repartir trabajo; paso 8 de 9 en Paralelismo de datos con rayon.

← Anterior Siguiente →