Menu
Coddy logo textTech

Распространённые шаблоны для двумерных массивов

Часть раздела Логика и управление потоком путешествия по Ruby на Coddy. Урок 13 из 56.

Некоторые операции с двумерными массивами встречаются настолько часто, что их стоит узнавать по названию.

Суммируйте каждую ячейку: преобразуйте grid в одномерный массив и вызовите sum:

grid = [[1, 2], [3, 4]]
puts grid.flatten.sum  # 10

Главная диагональ: ячейки, в которых индекс строки равен индексу столбца (matrix[i][i]):

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

(0...matrix.length).each do |i|
  puts matrix[i][i]
end
# 1, 5, 9

transpose: В Ruby это встроено. Строки становятся столбцами, и наоборот:

matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

Знание этих функций по именам избавляет вас от необходимости переписывать одни и те же вложенные циклы.

challenge icon

Задание

Легко

Дана квадратная matrix (n × n). Выведите три строки, все они получены из описанных в теории шаблонов:

  1. Anti-diagonal sum: <n> — sum ячеек, для которых r + c == matrix.length - 1
  2. Column sums: [...] — sum каждого столбца. Подсказка: сначала выполните transpose, затем сопоставьте каждой строке её sum, затем используйте inspect
  3. Symmetric: true или false: равна ли matrix собственной transpose?

Для matrix по умолчанию вывод будет следующим:

Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: false

Попробуйте сами

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

# TODO: anti-diagonal sum, column sums via transpose, symmetric check
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby