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


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

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

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

но я хотел бы знать, если бы был как Рубин один лайнер, который будет делать это в чистом виде манера.

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

3 54

3 ответа:

вы ищете #flatten:

concatenated = array_of_arrays.flatten

по умолчанию это будет сглаживать списки рекурсивно. #flatten принимает необязательный аргумент для ограничения глубины рекурсии-в документации перечислены примеры, иллюстрирующие разницу.

или вообще:

array_of_arrays.reduce(:concat)

вы можете использовать плющить! метод. например. a = [ 1, 2, [3, [4, 5] ] ] a.flatten! #=> [1, 2, 3, 4, 5]