use std::collections::HashMap; pub type WordCounts = HashMap; pub fn count(counts: &mut WordCounts, word: String) { add(counts, word, 1); } pub fn add(counts: &mut WordCounts, word: String, count: u32) { let counter = counts.entry(word).or_insert(0); *counter += count; } pub fn print(counts: &WordCounts, max: usize) { let mut counts: Vec<_> = counts.iter().map(|(w,c)| (c,w)).collect(); counts.sort(); for (count, word) in counts.into_iter().rev().take(max) { println!("{} {}", count, word); } }