Reputation: 2066
I have an array of arrays in Ruby on Rails (3.1) where all the internal arrays are of different size. Is there a way to easily concatenate all the internal arrays to get one big one dimesional array with all the items?
I know you can use the Array::concat function to concatenate two arrays, and I could do a loop to concatenate them sequentially like so:
concatenated = Array.new
array_of_arrays.each do |array|
concatenated.concat(array)
end
but I wanted to know if there was like a Ruby one-liner which would do it in a cleaner manner.
Thanks for your help.
Upvotes: 85
Views: 77902
Reputation: 160
You can use flatten! method. eg.
a = [ 1, 2, [3, [4, 5] ] ]
a.flatten! #=> [1, 2, 3, 4, 5]
Upvotes: 6
Reputation: 39950
You're looking for #flatten
:
concatenated = array_of_arrays.flatten
By default, this will flatten the lists recursively. #flatten
accepts an optional argument to limit the recursion depth – the documentation lists examples to illustrate the difference.
Upvotes: 187