Menu
Coddy logo textTech

Доступ к элементам двумерного массива

Часть раздела Логика и управление потоком путешествия по 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, а не вызывает ошибку.

challenge icon

Задание

Новичок

Дан двумерный массив matrix. Прочитайте три целых числа (три строки): r1, c1, затем v. После этого:

  1. Выведите значение в matrix[r1][c1]
  2. Установите matrix[r1][c1] = v
  3. Выведите весь обновленный массив 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, затем вывести всю матрицу
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком