LoginSignup
1
0

More than 3 years have passed since last update.

A Tour of GoのExercise: Mapsを解く

Last updated at Posted at 2021-02-28

考えたこと

まず設問を理解します。

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)
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0