Итак, вот и упражнение 23 из Тура Го.
Реализуйте функцию WordCount. Она должна возвращать карту (тип данных map) подсчетов каждого «слова» в строке s. Функция wc.Test запускает набор тестов против предоставленной функции и выводит успех или неудачу. Для выполнения задания имеет смысл использовать функцию strings.Fields.
Решение:
Для начала опишем примерный алгоритм действий.
1) взять фразу (строку) и разделить её на слова с помощью strings.Fields…
…эта функция вернет срез (slice) с подстроками (substrings)
2) сохранить каждый элемент среза в карту (map)
3) если при сохранении уже есть такой же элемент с именем map
элемент — не добавлять его, а увеличить количество
дублирующего элемента… а еще лучше — пройти по всем элементам среза при помощи range
Что за функция func Fields(s string) []string
Fields разбивает строку s вокруг каждого экземпляра одного или нескольких последовательных символов пробела, как определено unicode.IsSpace, возвращая фрагмент подстроки s или пустой фрагмент, если s содержит только пробел.
Примеры строк для проверки:
I am learning Go!
I ate a donut. Then I ate another donut.
Код:
package main
import (
"golang.org/x/tour/wc"
"strings"
//"fmt"
)
func WordCount(s string) map[string]int {
var slice[] string
slice = strings.Fields(s)
// fmt.Printf("%q\n", slice)
m := make(map[string]int)
// fmt.Println (m)
for _, value := range slice {
m[value] += 1
}
return m
}
func main() {
wc.Test(WordCount)
}
