This exercise from the golang tour asks for a function that will count the number of times each word appears in a string. I think of it as using a hash to contain a histogram of word frequency. The if/else could be tighter if go had a ternary operator.
Code:
package main
import "strings"
import "fmt"
func WordCount (s string) map[string]int {
substrs := strings.Fields(s)
fmt.Println(substrs)
// key,value ==> word,count
// iterate over substrs, if key in map, value++, else create
counts := make(map[string]int)
for _, word := range substrs {
_, ok := counts[word]
if ok == true {
counts[word] += 1
} else {
counts[word] = 1
}
}
return counts
}
func main() {
fmt.Println(WordCount("now is the now is the go go go it a a a a a"))
fmt.Println(WordCount("1 2 3 11 22 33 1 2 3"))
}
Output:
[now is the now is the go go go it a a a a a]
map[now:2 the:2 go:3 a:5 is:2 it:1]
[1 2 3 11 22 33 1 2 3]
map[2:2 33:1 1:2 11:1 22:1 3:2]
Common Error:
./wordcount2.go:20: cannot convert true to type int
./wordcount2.go:20: invalid operation: ok == true (mismatched types int and bool)
This occurs when attempting:
ok := counts[word]
Instead of:
_, ok := counts[word]
Hey Kevin
ReplyDeleteI had the same solution you did, but noticed you don't need the conditional since you already defined you map to have element types of int. You can simply update your map as so
counts[word] += 1
Also, if you were to use the if statement, you can use the shorthand !ok since you are testing a boolean value.
I made a gist for my solution here: https://gist.github.com/3158788
Kindest regards
Thomas Frederiksen
This comment has been removed by a blog administrator.
ReplyDeleteMeanwhile several tour operators wishing to change the habits of lots of tourists offer very attractive prices just in good time long before the beginning of the season.click here
ReplyDeleteI have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog! seo expert
ReplyDeleteFrom the beginning days of your new physical fitness program, the aim of that activity will be to achieve the lower end of the target heart rate range and keep the heart rate within that range for the duration of the exercise. api fat burner advanced review
ReplyDeleteAs such, gamers can relaxation assured that may be a|it is a} trustworthy on-line on line casino. Part of the Videoslots licence means that it's always held accountable for its actions when it comes to of|in relation to} player safety and safety from problem gambling. The Videoslots bonus offer includes a matched deposit as much as} £200. This is fairly frequent in the world of on-line on line 카지노 사이트 casino new player promotions.
ReplyDelete