| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package main
- import (
- "fmt"
- "io/ioutil"
- "path/filepath"
- "sort"
- "strings"
- )
- type Pair struct {
- key string
- value int
- }
- type PairSlice []Pair
- func (s PairSlice) Len() int {
- return len(s)
- }
- func (s PairSlice) Swap(i, j int) {
- s[i], s[j] = s[j], s[i]
- }
- func (s PairSlice) Less(i, j int) bool {
- if s[i].value == s[j].value {
- return s[i].key < s[j].key
- } else {
- return s[i].value > s[j].value
- }
- }
- func main() {
- const path = "../testdata"
- dataDir, err := ioutil.ReadDir(path)
- if err != nil {
- fmt.Println("Directory not found!")
- return
- }
- dict := make(map[string]int)
- for _, file := range dataDir {
- data, _ := ioutil.ReadFile(filepath.Join(path, file.Name()))
- word := ""
- for i := range data {
- if data[i] >= 'A' && data[i] <= 'Z' {
- data[i] += 'a' - 'A'
- }
- if data[i] >= 'a' && data[i] <= 'z' || word != "" && data[i] == '\'' {
- word = strings.Join([]string{word, string(data[i])}, "")
- } else if word != "" {
- dict[word]++
- word = ""
- }
- }
- if word != "" {
- dict[word]++
- }
- }
- answer := make(PairSlice, 0)
- for word, cnt := range dict {
- answer = append(answer, Pair{word, cnt})
- }
- sort.Sort(answer)
- for _, pair := range answer {
- fmt.Println(pair.key, pair.value)
- }
- }
|