Подтвердить что ты не робот

Ruby: Как объединить массив массивов в один

У меня есть массив массивов в Ruby on Rails (3.1), где все внутренние массивы имеют разный размер. Есть ли способ легко объединить все внутренние массивы, чтобы получить один большой одномерный массив со всеми элементами?

Я знаю, что вы можете использовать функцию Array:: concat, чтобы объединить два массива, и я мог бы сделать цикл, чтобы последовательно их соединить:

concatenated = Array.new
array_of_arrays.each do |array|
    concatenated.concat(array)
end

но я хотел знать, был ли он похожим на однострочный Ruby, который сделал бы это более чистым способом.

Спасибо за вашу помощь.

4b9b3361

Ответ 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]