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!
Muuito melhor assim, vlw!!