Perguntaram-me isso recentemente durante uma entrevista por telefone e, em meu nervosismo, tive dificuldade em pensar em algo elegante.
Depois, eu rapidamente descobri (claro, cérebro estúpido):
# Goal: recursively flatten array
# flatten([[1, [], [2, 3]], [[[[4]]]], 5]) # => [1, 2, 3, 4, 5]
def flatten(array, flattened = Array.new)
array.each_with_index do |elem, i|
if elem.is_a?(Array)
flatten(elem, flattened)
else
flattened << elem
end
end
flattened
end
puts flatten([[1, [], [2, 3]], [[[[4]]]], 5])
# => [1, 2, 3, 4, 5]