Распространённые шаблоны для двумерных массивов
Часть раздела Логика и управление потоком путешествия по 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, 9transpose: В Ruby это встроено. Строки становятся столбцами, и наоборот:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]Знание этих функций по именам избавляет вас от необходимости переписывать одни и те же вложенные циклы.
Задание
ЛегкоДана квадратная matrix (n × n). Выведите три строки, все они получены из описанных в теории шаблонов:
Anti-diagonal sum: <n>— sum ячеек, для которыхr + c == matrix.length - 1Column sums: [...]— sum каждого столбца. Подсказка: сначала выполните transpose, затем сопоставьте каждой строке её sum, затем используйтеinspectSymmetric: 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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки: подробный разбор
Обзор методов строкИнтерполяция строкПеребор строкРазделение и объединениеПовторение — String Weaver4Блоки, Proc и Lambda
Что такое блок?do..end и фигурные скобкиКлючевое слово yieldПараметры блокаProc и LambdaПовторение — пользовательский итератор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Повторение — конвейер данных3Двумерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваПеребор двумерных массивовРаспространённые шаблоны для двумерных массивовПовторение — операции с матрицами6Проект — Менеджер библиотеки
Обзор проектаДобавление книгиПотренируйтесь самостоятельно: Онлайн-компилятор Ruby