Язык Go. Карты (тип maps)


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

 


Запись опубликована в рубрике Go. Добавьте в закладки постоянную ссылку.

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.