Я реализую функцию, которая считает слова, и я пытаюсь написать это с помощью подпрограмм. До сих пор я сделал массивы []string
для подходящих размеров исходного текста строки, и я отправляю их в goroutine каждое, чтобы подсчитать слова и добавить их в пару k / v внутри map[string]int
, затем я хочу взять их все через мой канал и прочитайте все карты и просто посчитайте, сколько всего слов было в наличии, и верните это map[string]int
, но это то, где я потерялся. Я пытался сделать что-то вроде
mapSummary := make(map[string]int)
for k, v := range channel {
mapSummary[k] += v
}
но это не работает, так как я использую две переменные в диапазоне, и только с одной я не уверен, как это сделать. Итак, как мне добавить все эти карты вместе, которые я отправил через канал? Мне не нужны, чтобы вы, ребята, показали мне, как именно это делается (это домашнее задание), но, поскольку я не получал никакой помощи от моих ТП в нашей лабораторной работе, я был бы очень признателен за некоторые подсказки относительно того, как это должно быть сделано, я также Посмотрите, как я распределяю массив []string
, это плохо, но я сам это выясню! :) Этот код не включает основную функцию или большую часть кода, но необходимые части, которые, я надеюсь, помогут вам понять это.
ch := make(chan map[string]int)
for i := 0; i < 8; i++ {
wg.Add(1)
words := text[i*(len(text)/8):(i+1)*(len(text)/8)]
go count(words, ch, wg)
}
wg.Wait()
mapSummary := make(map[string]int)
for k, v := range ch {
mapSummary[k] += v
}
return mapSummary
func count(words []string, ch chan<- map[string]int, wg *sync.WaitGroup) {
freqs := make(map[string]int)
for _, word := range words {
freqs[word] += 1
}
wg.Done()
ch <- freqs
}
он говорит мне "слишком много переменных в диапазоне".