Вот несколько различных методов сжатия строк и столбцов в 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]]