Executando verificação de segurança...
1
CMA
1 min de leitura ·

[Rust] - Preciso de uma sugestão para o codigo a seguir (Iterators5 - Rustlings)

O desafio proposto foi o seguinte: https://github.com/rust-lang/rustlings/blob/main/exercises/iterators/iterators5.rs

A minha solução funciona bem, porém percebi uma demora e também achei essa quantidade de &&& zuado. Se alguem souber como posso melhorar isso, por favor me ajude rs

Vlw

fn count_collection_iterator(collection: &[HashMap<String, Progress>], value: Progress) -> usize {
    let flattened = collection
        .into_iter()
        .flat_map(|map| map.values())
        .collect::<Vec<_>>();

    flattened.iter().filter(|&&&x| x == value).count()
}
Carregando publicação patrocinada...
2

Na primeira parte da sua função você pega o array the maps e extrai um iterador e achata ele com os valores.

Aí vc transforma em vector pra depois transformar em iterator de novo, o que não faz muito sentido ao menos que vc fosse usar o vector pra alguma coisa, o que não parece ser o caso.

Talvez o gargalo esteja ai dependendo do tamanho do seu dataset.

fn count_collection_iterator(collection: &[HashMap<String, String>], value: String) -> usize {
    collection
        .iter()
        .flat_map(|map| map.values())
        .filter(|x| **x == value)
        .count()
}

Caso ainda esteja demorado, talvez o problema esteja na comparação do seu objeto Progress. Ai seria melhor implementar uma comparaçao utilizando um hashcode que é pré-calculado na criação do objeto.

Boa sorte!

0