Шаблоны словарей
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 9 из 78.
Шаблон словаря перечисляет ключи и шаблоны, которым должны соответствовать их значения. Он соответствует словарю, в котором есть ровно эти ключи, в любом порядке:
var event := {"type": "move", "dir": "left"}
match event:
{"type": "jump"}:
print("Jump!")
{"type": "move", "dir": var d}:
print("Moving ", d)Moving leftЗначение "type" должно быть "move", а значение "dir", каким бы оно ни было, сохраняется в d. Словарь с ключом, который не указан в шаблоне, не подходит. Добавь .. в конце, чтобы разрешить дополнительные ключи:
var hit := {"type": "attack", "damage": 30, "crit": true}
match hit:
{"type": "attack", "damage": _}:
print("Exactly two keys")
{"type": "attack", "damage": var dmg, ..}:
print("Hit for ", dmg)Hit for 30Ключ, записанный без значения, только проверяет, существует ли этот ключ: {"name", ..}: соответствует любому словарю, в котором есть ключ "name". Здесь тоже работают защитные условия: {"type": "attack", "damage": var dmg} when dmg > 50:.
Задание
ЛегкоПрограмма считывает игровое событие, записанное в виде пар key=value, разделённых запятыми, например type=move,dir=left, и сохраняет его в словаре event (он уже написан). Все значения — строки.
Используй инструкцию match с шаблонами словаря в следующем порядке:
- Точно ключи
type("move") иdir: выведиMovingи направление - Точно ключи
type("attack") иdamage: выведиTaking, урон иdamage typeимеет значение"heal", при любых других ключах: выведиHealing- Любой другой словарь с ключом
type: выведиUnknown event:и значение ключа type - Всё остальное: выведи
Invalid event
Для ввода type=attack,damage=30 вывод будет таким:
Taking 30 damageВ событии вроде type=move,dir=up,speed=2 есть дополнительный ключ, поэтому программа выведет Unknown event: move.
Попробуйте сами
extends Node
func _ready():
var event := {}
for pair in OS.read_string_from_stdin().split(","):
var kv := pair.split("=")
event[kv[0]] = kv[1]
# Сопоставить event с шаблонами словаря
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript