Типичные шаблоны работы с двумерными массивами
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 17 из 78.
Некоторые способы обхода сетки встречаются снова и снова. В этих примерах используется квадратная сетка размером n:
var grid := [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
var n := grid.size()Диагонали. На главной диагонали индекс строки равен индексу столбца: grid[i][i]. На побочной диагонали, от верхнего правого угла к нижнему левому, индекс столбца равен n - 1 - i. Достаточно одного цикла:
for i in range(n):
print(grid[i][i], " ", grid[i][n - 1 - i])1 3
5 5
9 7Строки, столбцы и границы. Зафиксируй один индекс и перебирай другой. Верхняя строка — это grid[0], а нижняя строка — grid[n - 1]. В столбце c остаётся фиксированным, а строка меняется:
var left_total := 0
for r in range(n):
left_total += grid[r][0] # левый столбец: 1 + 4 + 7
print(left_total) # 12Соседи. В играх на сетке часто нужно смотреть на клетки вокруг позиции: сверху, снизу, слева и справа. Сохрани четыре шага в виде массива пар [row, column] и пропускай шаги, ведущие за пределы сетки:
var r := 0
var c := 1
for step in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
var nr: int = r + step[0]
var nc: int = c + step[1]
if nr >= 0 and nr < n and nc >= 0 and nc < n:
print(grid[nr][nc])Ячейка grid[0][1] находится на верхней границе, поэтому у неё 3 соседа: 5, 1 и 3.
Задание
ЛегкоНапиши функцию с именем print_patterns с одним параметром grid: квадратный двумерный массив целых чисел (объяви его как grid: Array). Она выводит шесть строк, в которых значения разделены одиночными пробелами:
Main diagonal:и ячейки, у которых индекс строки равен индексу столбцаAnti-diagonal:и ячейки от верхнего правого до нижнего левого углаTop row:и первая строкаBottom row:и последняя строкаLeft column:и первый столбец, сверху внизRight column:и последний столбец, сверху вниз
Для сетки [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] вывод будет таким:
Main diagonal: 1 6 11 16
Anti-diagonal: 4 7 10 13
Top row: 1 2 3 4
Bottom row: 13 14 15 16
Left column: 1 5 9 13
Right column: 4 8 12 16Тесты вызывают print_patterns() самостоятельно. Не вызывай её и ничего не возвращай.
Попробуйте сами
func print_patterns(grid: Array):
# Напишите код здесь
pass
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript