From a40b75ce407fb6abc724bdaac83dec718bd3e31a Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Mon, 23 Jul 2018 16:20:09 +0300 Subject: Change: put the WordCount stuff into its own module --- src/counts.rs | 32 ++++++++++++++++++++++++++++++++ src/main.rs | 40 ++-------------------------------------- 2 files changed, 34 insertions(+), 38 deletions(-) create mode 100644 src/counts.rs 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; + +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; - - -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); - } -} -- cgit v1.2.1