← Все этапы
03 · ДАННЫЕ И ТИПЫУрок 15 из 3320 минут

Карты и пары ключ — значение

Находим записи по ключу, проверяем наличие, меняем и удаляем значения.

Доступ по ключу

Карта связывает уникальные ключи со значениями: например, код кабинета с его вместимостью. Тип задаёт оба типа данных, как в map[string]int. Пустую карту можно создать литералом или функцией make; нулевая карта равна nil, читать из неё можно, но попытка записи вызывает панику.

Запись и чтение используют квадратные скобки. Если ключ отсутствует, чтение возвращает нулевое значение типа элемента. Чтобы отличить отсутствующий ключ от существующей записи со значением 0, используй второе значение: value, ok := rooms["B-12"]. Удаляет пару встроенная функция delete.

Порядок обхода карты не определён. Если порядок важен для вывода, собери ключи в срез, отсортируй его и затем читай карту по отсортированным ключам.

Пример

package main

import (
	"fmt"
	"sort"
)

func main() {
	rooms := map[string]int{"A-1": 12, "B-2": 0, "C-3": 8}
	rooms["D-4"] = 16

	capacity, found := rooms["B-2"]
	fmt.Printf("B-2: %d, найден: %t\n", capacity, found)
	delete(rooms, "C-3")

	codes := make([]string, 0, len(rooms))
	for code := range rooms {
		codes = append(codes, code)
	}
	sort.Strings(codes)
	for _, code := range codes {
		fmt.Printf("%s: %d\n", code, rooms[code])
	}
}

Ключ B-2 присутствует, хотя его значение равно нулю, поэтому found будет true. Удалённого ключа C-3 среди строк не будет. Сортировка делает оставшийся вывод повторяемым.

Для подсчётов карта удобна тем, что чтение несуществующего целочисленного ключа даёт 0: выражение counts[word]++ создаёт первую запись со значением 1.

Практика

Попробуйте сами

Составь карту количества мест для трёх залов: «Синий» — 20, «Белый» — 0, «Зелёный» — 14. Проверь ключ «Белый» с формой чтения из двух результатов, удали «Зелёный» и выведи оставшиеся пары в алфавитном порядке ключей.

Проверка результата

Как понять, что получилось

Для «Белый» программа печатает значение 0 и признак наличия true. После удаления вывод содержит только «Белый» и «Синий», именно в таком порядке; карту можно обойти через сортируемый срез ключей.

Карты и пары ключ — значение | Go | WebSchool · Go