为什么我在golang tour#43中的单词计数器不起作用?

时间:2014-03-25 11:03:10

标签: go

我试图从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)
}

Play

2 个答案:

答案 0 :(得分:2)

你正在解决错误的问题。它不会询问每个单词的长度,而是询问每个单词出现的次数。变化

c[v] = utf8.RuneCountInString(v)

c[v] += 1 // or c[v]++

答案 1 :(得分:1)

问题是c[v] = utf8.RuneCountInString(v)。它有两个问题:

  1. 每次重新遇到时,您都会重置每个单词的计数器。你应该增加,而不是设置。

  2. 您正在将单词中的符文数设置为计数器。谜题是"一个单词出现在文本中的次数"。所以只需执行类似c[v] = c[v] + 1的操作(如果条目为空,则默认为0)

  3. 另外,我正常化文本 - 剥离标点符号和小写一切。