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.
This can be done in a few ways in Ruby. The first is the plus operator. This will append one array to the end of another, creating a third array with the elements of both. Alternatively, use the concat method (the + operator and concat method are functionally equivalent).
In this case, you can use the concat() method in Ruby. concat() is used to join, combine, concatenate, or append arrays. The concat() method returns a new array with all of the elements of the arrays combined into one.
The concat() method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.
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.
Or more generally:
array_of_arrays.reduce(:concat)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With