Ruby: Как объединить массив массивов в один
У меня есть массив массивов в Ruby on Rails (3.1), где все внутренние массивы имеют разный размер. Есть ли способ легко объединить все внутренние массивы, чтобы получить один большой одномерный массив со всеми элементами?
Я знаю, что вы можете использовать функцию Array:: concat, чтобы объединить два массива, и я мог бы сделать цикл, чтобы последовательно их соединить:
concatenated = Array.new
array_of_arrays.each do |array|
concatenated.concat(array)
end
но я хотел знать, был ли он похожим на однострочный Ruby, который сделал бы это более чистым способом.
Спасибо за вашу помощь.
Ответы
Ответ 1
Вы ищете #flatten
:
concatenated = array_of_arrays.flatten
По умолчанию это приведет к сглаживанию списков. #flatten
принимает необязательный аргумент, чтобы ограничить глубину рекурсии - примеры документации перечислены, чтобы проиллюстрировать разницу.
Ответ 2
Или в более общем плане:
array_of_arrays.reduce(:concat)
Ответ 3
Вы можете использовать flatten! метод. например.
a = [ 1, 2, [3, [4, 5] ] ]
a.flatten! #=> [1, 2, 3, 4, 5]