Итоги: хранилище ключ-значение
Часть раздела Основы путешествия по GO на Coddy — урок 93 из 109.
Задание
ЛегкоДавайте попрактикуемся в использовании карт (maps) с помощью простого счетчика слов!
Ваша задача — реализовать программу, которая подсчитывает, сколько раз каждое слово встречается в списке слов.
Требования:
- Допишите функцию
addWord(), которая добавляет слово в карту счетчика - Допишите функцию
getCount(), которая возвращает количество для конкретного слова - Допишите функцию
removeWord(), которая удаляет слово из счетчика
Это краткий обзор того, как использовать карты в качестве хранилища «ключ-значение».
Примечание: для единообразия результаты подсчета слов будут выводиться в алфавитном порядке.
Попробуйте сами
package main
import (
"fmt"
"sort"
)
// addWord добавляет слово в карту счетчика
func addWord(counter map[string]int, word string) {
// Ваш код здесь
}
// getCount возвращает количество для конкретного слова
func getCount(counter map[string]int, word string) int {
// Ваш код здесь
return 0
}
// removeWord удаляет слово из счетчика
// Возвращает true, если слово было найдено и удалено
func removeWord(counter map[string]int, word string) bool {
// Ваш код здесь
return false
}
// printWordCounts выводит количество слов в алфавитном порядке
func printWordCounts(counter map[string]int) {
// Получить все ключи (слова) из карты
words := make([]string, 0, len(counter))
for word := range counter {
words = append(words, word)
}
// Отсортировать слова по алфавиту
sort.Strings(words)
// Вывести каждое слово и его количество в отсортированном порядке
for _, word := range words {
fmt.Printf("%s: %d\n", word, counter[word])
}
}
func main() {
// Инициализировать карту счетчика слов
wordCounter := make(map[string]int)
// Добавить несколько слов
words := []string{"apple", "banana", "apple", "orange", "banana", "apple"}
for _, word := range words {
addWord(wordCounter, word)
}
// Вывести количество слов
fmt.Println("Word counts:")
printWordCounts(wordCounter)
// Получить количество для конкретных слов
fmt.Printf("\nCount for 'apple': %d\n", getCount(wordCounter, "apple"))
fmt.Printf("Count for 'grape': %d\n", getCount(wordCounter, "grape"))
// Удалить слово
removed := removeWord(wordCounter, "banana")
fmt.Printf("\nRemoved 'banana': %v\n", removed)
// Попробовать удалить несуществующее слово
removed = removeWord(wordCounter, "grape")
fmt.Printf("Removed 'grape': %v\n", removed)
// Вывести итоговое количество слов
fmt.Println("\nFinal word counts:")
printWordCounts(wordCounter)
}Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений9Указатели
Что такое указатель?Объявление переменных-указателейОператор взятия адресаРазыменование указателейИспользование указателей в функцияхНулевые указателиИтоги: Понимание указателей12Составные типы: Карты (Maps)
Введение в картыОбъявление литералов картСоздание карт с помощью `make`Добавление и обновление пар ключ-значениеДоступ к значениям картыПроверка существования ключаУдаление элементов картыДлина картыИтерация по картамИтоги: хранилище ключ-значение