Как оптимизировать подсчет одинаковых элементов в массиве
Есть пример вот такого кода. Но проблема в том что он вывод первое чаще повторяющеся слово, а нужно сделать похожим способом первых 10 слов
func MostPopularWord(words []string) string {
wordsCount := make(map[string]int, 0)
mostPopWord := ""
max := 0
for _, word := range words {
wordsCount[word]++
if wordsCount[word] > max {
max = wordsCount[word]
mostPopWord = word
}
}
return mostPopWord
}
Ответы (1 шт):
Если вопрос звучит про оптимизацию, то:
wordsCount := make(map[string]int, len(words))
это приведет к аллокации памяти для wordsCount в размере слайса входных слов и не будет в процессе выполнения функции дополнительных переаллокаций.
Если вопрос про выборку 10 самых популярных слов, то тут совсем не то. Предлагается сделать структуру типа
type popularWord {
Word string
Count int
}
Пройтись по слайсу, подсчистать через map[string]int, пройтись по map, разложить с слайс структур, дополнительно сделать реализацию типа:
sort.Slice(slicePopularWord, func(i, j int) bool {
return slicePopularWord[i].Count > slicePopularWord[j].Count
})
И в конце return slicePopularWord[:10] - 10 самых популярных слов.
Все проверки условий оставлю на Вас.