Вложенные циклы с двумерными массивами
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 14 из 78.
Чтобы пройти по каждой ячейке двумерного массива, поместите один цикл внутрь другого. Внешний цикл проходит по строкам, а внутренний — по ячейкам текущей строки:
var grid := [[1, 2, 3], [4, 5, 6]]
var total := 0
for row in grid:
for cell in row:
total += cell
print(total) # 21Когда вам нужны координаты каждой ячейки, перебирайте индексы. r — индекс строки, c — индекс столбца, а во внутреннем цикле используется grid[r].size() — длина текущей строки:
for r in range(grid.size()):
for c in range(grid[r].size()):
grid[r][c] *= 10
print(grid) # [[10, 20, 30], [40, 50, 60]]Присваивание cell в цикле for cell in row не изменяет сетку, потому что cell содержит копию числа. Изменяй ячейки по их индексам, как показано выше.
Вложенные циклы также создают сетку. Создай новую строку внутри внешнего цикла, заполни её во внутреннем цикле, а затем добавь её:
var town := []
for r in range(3):
var row := []
for c in range(4):
row.append(".")
town.append(row)
town[1][2] = "P"
for row in town:
print("".join(row))....
..P.
....Строку нужно создать внутри внешнего цикла. При добавлении массива он используется совместно, а не копируется: если добавить один и тот же row три раза, все три строки будут одним массивом, и town[1][2] = "P" поместит P в каждую строку.
Задание
ЛегкоНарисуйте карту города. Программа считывает четыре целых числа, по одному в каждой строке: количество строк, количество столбцов, строку, в которой находится игрок, и столбец, в котором находится игрок. Позиция игрока всегда находится внутри карты.
- Создайте
grid— двумерный массив с указанным количеством строк и столбцов, где каждая ячейка содержит".". Используйте вложенные циклы и создавайте новый массив строк для каждой строки. - Установите значение ячейки в позиции игрока равным
"P". - Выведите карту: по одной строке на каждой строке вывода, без пробелов между ячейками.
Для входных данных 3, 4, 1 и 2 вывод будет таким:
....
..P.
....Попробуйте сами
extends Node
func _ready():
var rows := int(OS.read_string_from_stdin())
var cols := int(OS.read_string_from_stdin())
var player_row := int(OS.read_string_from_stdin())
var player_col := int(OS.read_string_from_stdin())
var grid := []
# Создайте сетку с помощью вложенных циклов
# Разместите игрока на карте
# Выведите карту
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript