Массивы словарей
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 20 из 78.
Если у тебя много записей с одинаковыми полями, храни их в массиве словарей: каждый элемент — это одна запись.
var enemies := [
{"type": "slime", "hp": 30},
{"type": "orc", "hp": 80},
{"type": "dragon", "hp": 500}
]Индекс выбирает запись, а ключ — поле: enemies[1]["type"] — это "orc". Цикл for даёт тебе по одному словарю за проход:
for enemy in enemies:
if enemy["hp"] >= 80:
print(enemy["type"])orc
dragonДобавь запись с помощью append(). Чтобы изменить поле каждой записи, присвой значение через переменную цикла. Как и массивы, словари являются общими, а не копируются, поэтому enemy — это словарь внутри массива, и изменение сохраняется в нём:
enemies.append({"type": "bat", "hp": 10})
for enemy in enemies:
enemy["hp"] += 5
print(enemies[3]) # { "type": "bat", "hp": 15 }Чтобы найти запись по одному из её полей, пройдись циклом и сравни значения. Начни с null, чтобы понять, если ничего не совпало:
var found = null
for enemy in enemies:
if enemy["type"] == "orc":
found = enemy
if found == null:
print("No orc")
else:
print(found["hp"]) # 85print() показывает весь массив со всеми словарями в нём: [{ "type": "slime", "hp": 35 }, ...].
Задание
ЛегкоСоздай таблицу лидеров. Программа считывает целое число n, затем n строк, в каждой из которых указаны имя игрока и счёт, разделённые запятой, например Mia,95.
- Для каждой строки добавь в массив
playersсловарь с ключами"name"(имя) и"score"(счёт в видеint). - Выведи массив.
- Выведи
Best:, имя игрока с наибольшим счётом и счёт в скобках. Если у двух игроков одинаковый наибольший счёт, выведи первого.
Для входных данных 3, Mia,95, Leo,80 и Ana,97 вывод будет таким:
[{ "name": "Mia", "score": 95 }, { "name": "Leo", "score": 80 }, { "name": "Ana", "score": 97 }]
Best: Ana (97)Попробуйте сами
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
var players := []
# Считайте n игроков в массив
# Выведите массив и лучшего игрока
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript