考えたこと
まず設問を理解します。
string s で渡される文章の、各単語の出現回数のmapを返す必要があります。
ふむふむ、どうやら単語の出現回数を数えるのがこの問題の趣旨らしい。
Note: このテストスイートで何を入力とし、何を期待しているかについては、golang.org/x/tour/wcを見てみてください。
とあるので、golang.org/x/tour/wcをみてみると、テストケースがわかります。
{"I am learning Go!", map[string]int{
"I": 1, "am": 1, "learning": 1, "Go!": 1,
}},
ここまでくると全容が見えてきます。
"I am learning Go!"のような形式で入力が与えられるので、スペースで区切って、I とか am とかが何回出現するか数える、
というのがこの設問の答えということがわかります。
さて、どうやってスペースで区切るかですが、
strings.Fields で、何かヒントを得ることができるはずです。
と書いてあるのでstrings.Fields をみてみましょう。
まさに求めていたスペースで区切る関数でした。
引数で与えられたstringをスペースで分割して、stringのスライスを返す関数のようです。
ここまできたら、材料は揃ったのであとは解くだけです。
コード
Maps
package main
import (
"golang.org/x/tour/wc"
"strings"
)
func WordCount(s string) map[string]int {
m := make(map[string]int)
// stringをスペースで分割する
splited := strings.Fields(s)
for _, val := range splited {
// 出現回数を数える
m[val]++
}
return m
}
func main() {
wc.Test(WordCount)
}