我试图从go tour #43解决这个难题,但我不明白为什么我的单词计数器不起作用。 "打印"似乎打印出预期值,但测试仅看到" 1"无论数量如何。
package main
import (
"code.google.com/p/go-tour/wc"
"strings"
"unicode/utf8"
)
func WordCount(s string) map[string]int {
// explode the string into a slice without whitespaces
ws := strings.Fields(s)
//make a new map
c := make(map[string]int)
//iterate over each word
for _, v := range ws{
c[v] = utf8.RuneCountInString(v)
}
print( c["am"])
return c
}
func main() {
wc.Test(WordCount)
}
答案 0 :(得分:2)
你正在解决错误的问题。它不会询问每个单词的长度,而是询问每个单词出现的次数。变化
c[v] = utf8.RuneCountInString(v)
的
c[v] += 1 // or c[v]++
答案 1 :(得分:1)
问题是c[v] = utf8.RuneCountInString(v)
。它有两个问题:
每次重新遇到时,您都会重置每个单词的计数器。你应该增加,而不是设置。
您正在将单词中的符文数设置为计数器。谜题是"一个单词出现在文本中的次数"。所以只需执行类似c[v] = c[v] + 1
的操作(如果条目为空,则默认为0)
另外,我正常化文本 - 剥离标点符号和小写一切。