diff options
author | Lars Wirzenius <liw@liw.fi> | 2018-07-23 16:20:09 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-07-23 16:20:09 +0300 |
commit | a40b75ce407fb6abc724bdaac83dec718bd3e31a (patch) | |
tree | 21d148e53f59f78bbe6e8def9eb193780d63d512 | |
parent | 8628adc10d6ed2384f47e842f1bec2ecba079d93 (diff) | |
download | wordfreq-a40b75ce407fb6abc724bdaac83dec718bd3e31a.tar.gz |
Change: put the WordCount stuff into its own module
-rw-r--r-- | src/counts.rs | 32 | ||||
-rw-r--r-- | src/main.rs | 40 |
2 files changed, 34 insertions, 38 deletions
diff --git a/src/counts.rs b/src/counts.rs new file mode 100644 index 0000000..a339eb3 --- /dev/null +++ b/src/counts.rs @@ -0,0 +1,32 @@ +use std::collections::HashMap; +pub type WordCounts = HashMap<String, u32>; + +pub fn count(counts: &mut WordCounts, word: String) { + add(counts, word, 1); +} + +pub fn add_counts(counts: &mut WordCounts, other: &WordCounts) { + for (word, count) in other.iter() { + add(counts, word.to_string(), *count); + } +} + +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 top = Vec::new(); + for (word, count) in counts.iter() { + top.push((count, word)); + if top.len() > max { + top.sort(); + top.reverse(); + top.truncate(max); + } + } + for (count, word) in top.iter() { + println!("{} {}", count, word); + } +} diff --git a/src/main.rs b/src/main.rs index aef750d..f0fd9ae 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,9 +2,9 @@ use std::env; use std::fs::File; use std::io; use std::io::BufRead; -use std::collections::HashMap; - +mod counts; +use counts::*; fn main() -> io::Result<()> { for filename in env::args().skip(1) { @@ -45,39 +45,3 @@ fn count_words_in_line(line: &str) -> WordCounts { } counts } - - -type WordCounts = HashMap<String, u32>; - - -fn count(counts: &mut WordCounts, word: String) { - add(counts, word, 1); -} - - -fn add_counts(counts: &mut WordCounts, other: &WordCounts) { - for (word, count) in other.iter() { - add(counts, word.to_string(), *count); - } -} - - -fn add(counts: &mut WordCounts, word: String, count: u32) { - let counter = counts.entry(word).or_insert(0); - *counter += count; -} - -fn print(counts: &WordCounts, max: usize) { - let mut top = Vec::new(); - for (word, count) in counts.iter() { - top.push((count, word)); - if top.len() > max { - top.sort(); - top.reverse(); - top.truncate(max); - } - } - for (count, word) in top.iter() { - println!("{} {}", count, word); - } -} |