Методы Ruby для сжатия строк и столбцов с примерами кода

Вот несколько различных методов сжатия строк и столбцов в Ruby:

Метод 1: использование Array#transpose и Array#zip

rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
columns = rows.transpose
result = columns.zip(rows).flatten(1)
p result

Выход:

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

Метод 2: использование Enumerable#each_with_object

rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
columns = rows.each_with_object([]) { |row, arr| row.each_with_index { |elem, i| (arr[i] ||= []) << elem } }
p columns

Выход:

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

Метод 3. Использование цикла

rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
columns = []
rows.each do |row|
  row.each_with_index do |elem, i|
    columns[i] ||= []
    columns[i] << elem
  end
end
p columns

Выход:

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