Доступ к элементам двумерного массива
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 11 из 56.
Чтобы прочитать или обновить одну ячейку в двумерном массиве, используйте цепочку из двух поисков по индексу: первый выбирает строку, второй — столбец.
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
puts matrix[0][0] # 10 (верхний левый угол)
puts matrix[1][2] # 60 (строка 1, столбец 2)
puts matrix[2][0] # 70 (нижний левый угол)Обновление ячейки использует тот же синтаксис в левой части:
matrix[0][1] = 99
puts matrix[0].inspect # [10, 99, 30]Два полезных запроса размерности:
puts matrix.length # 3 (количество строк)
puts matrix[0].length # 3 (столбцов в строке 0)Индексы начинаются с 0 и идут до length - 1. Выход за пределы возвращает nil, а не вызывает ошибку.
Задание
НовичокДан двумерный массив matrix. Прочитайте три целых числа (три строки): r1, c1, затем v. После этого:
- Выведите значение в
matrix[r1][c1] - Установите
matrix[r1][c1] = v - Выведите весь обновленный массив
matrix, используяinspect
Для входных данных 1 / 2 / 99 вывод будет следующим:
60
[[10, 20, 30], [40, 50, 99], [70, 80, 90]]Шпаргалка
Доступ к ячейкам и их обновление в двумерном массиве с использованием цепочки индексов [row][col]:
matrix = [
[10, 20, 30],
[40, 50, 60]
]
puts matrix[1][2] # 60
matrix[1][2] = 99 # обновление ячейки
puts matrix.inspect # [[10, 20, 30], [40, 50, 99]]Запросы формы (размера):
matrix.length # количество строк
matrix[0].length # количество столбцов в строке 0Индексация начинается с 0; обращение за пределы диапазона возвращает nil.
Попробуйте сами
matrix = [
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
]
r1 = gets.to_i
c1 = gets.to_i
v = gets.to_i
# TODO: вывести matrix[r1][c1], присвоить v, затем вывести всю матрицу
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Обзор методов строкИнтерполяция строкИтерация по строкамSplit и JoinИтоги — String Weaver4Блоки, Proc и лямбды
Что такое блок?do..end против фигурных скобокКлючевое слово yieldПараметры блокаProc и лямбдыИтоги: пользовательский итератор7Хеши. Часть 2
Hash.new со значениями по умолчаниюИтерация по хешамВложенные хешиСлияние и преобразованиеИтоги — счетчик частоты10Проект — Учёт студентов
Обзор проектаДобавить студента2Диапазоны
Что такое диапазон?Методы диапазоновДиапазоны в Case / WhenПовторение — практика по диапазонам5Мощь Enumerable
Select и RejectЦепочки MapReduce / Injectcount, all?, any?, none?group_by и partitionsort_by, min_by, max_byИтоги — Data Pipeline8Продвинутые условные конструкции
Case с классами и RegexМножественные значения в whenТернарный операторОднострочные if / unlessПовторение: Классификатор оценок3Двумерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваИтерация по двумерным массивамРаспространенные 2D-паттерныИтоги: Операции с матрицами6Проект — Менеджер библиотеки
Обзор проектаДобавление книги