summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-07-23 16:20:09 +0300
committerLars Wirzenius <liw@liw.fi>2018-07-23 16:20:09 +0300
commita40b75ce407fb6abc724bdaac83dec718bd3e31a (patch)
tree21d148e53f59f78bbe6e8def9eb193780d63d512
parent8628adc10d6ed2384f47e842f1bec2ecba079d93 (diff)
downloadwordfreq-a40b75ce407fb6abc724bdaac83dec718bd3e31a.tar.gz
Change: put the WordCount stuff into its own module
-rw-r--r--src/counts.rs32
-rw-r--r--src/main.rs40
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);
- }
-}