登录
首页 >  Golang >  Go问答

Go 中的字数统计

来源:stackoverflow

时间:2024-02-12 17:45:18 301浏览 收藏

哈喽!今天心血来潮给大家带来了《Go 中的字数统计》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我想编写一个程序,给定一个文件,按照从最频繁到最不频繁的顺序返回单词出现的频率,这是我编写的代码:

var counts = make(map[string]float64)
var countTotal float64

file, err := os.Open(os.Args[1])
if err != nil {
    log.Fatal(err)
}

scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
    counts[scanner.Text()] += 1.0
    countTotal += 1.0
}

var words = make([]string, 0, len(counts))
for word := range counts {
    words = append(words, word)
}
sort.SliceStable(words, func(i, j int) bool {
    return counts[words[i]] < counts[words[j]]
})

for _, word := range words {
    fmt.Println(word, ": ", counts[word]/countTotal)
}

我得到的是词频,但是按照相反的顺序,从不太频繁到更频繁,有人可以帮助我知道为什么我的程序是错误的吗? 谢谢


正确答案


您应该更改 sort.slicestable() 中的 less() 函数

现在您所看到的是按升序排序。 要改变这一点,只需将 less() 函数指定为

return counts[words[i]] > counts[words[j]]

到这里,我们也就讲完了《Go 中的字数统计》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>