Итак, вот и упражнение 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) }