WordCount
를 구현해봅시다. 이것은 문자열s
의 각word
의 개수의 맵을 반환해야 합니다.wc.Test
함수는 제공된 함수를 테스트하고 성공 혹은 실패를 출력하는 함수입니다. strings.Fields가 도움이 될 수 있습니다.
번역이 또… 조금 이상하다
wc.Test
함수로 우리가 작성한 함수를 여러 테스트 케이스로 테스트 해준다. (모두 PASS 해야함)바로 구현에 들어가보자..!
package main
import (
"golang.org/x/tour/wc"
"strings"
)
func WordCount(s string) map[string]int {
words := strings.Fields(s)
result := make(map[string]int)
for _,w := range words {
if result[w] == 0 {
result[w] = 1
}else{
result[w] = result[w] + 1
}
}
return result
}
func main() {
wc.Test(WordCount)
}
우선 strings.Fields로 문자열을 단어 단위의 배열로 반환한다.
반환된 배열을 for 문으로 돌면서, 맵에 이미 해당 단어의 key가 있는지 확인한다.
비어있는 key 값은 zero value를 반환하므로, 값이 0 인지 if 문을 주었다.
(value, ok = result[w]
를 사용하면 ok에 true, false로 key가 있는지 확인해주므로, 이를 사용하여 코드를 짜도 된다.)
마지막으로 result를 반환하면 끝🤠
PASS
f("I am learning Go!") =
map[string]int{"Go!":1, "I":1, "am":1, "learning":1}
PASS
f("The quick brown fox jumped over the lazy dog.") =
map[string]int{"The":1, "brown":1, "dog.":1, "fox":1, "jumped":1, "lazy":1, "over":1, "quick":1, "the":1}
PASS
f("I ate a donut. Then I ate another donut.") =
map[string]int{"I":2, "Then":1, "a":1, "another":1, "ate":2, "donut.":2}
PASS
f("A man a plan a canal panama.") =
map[string]int{"A":1, "a":2, "canal":1, "man":1, "panama.":1, "plan":1}
이런 결과물이 나온다! 🥳🥳🥳