[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()
}
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!