web-dev-qa-db-fra.com

Ruby: comment concaténer un tableau de tableaux en un

J'ai un tableau de tableaux dans Ruby on Rails (3.1) où tous les tableaux internes sont de taille différente. Existe-t-il un moyen de concaténer facilement tous les tableaux internes pour obtenir un grand tableau dimesional avec tous les éléments?

Je sais que vous pouvez utiliser la fonction Array :: concat pour concaténer deux tableaux, et je pourrais faire une boucle pour les concaténer séquentiellement comme suit:

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

mais je voulais savoir s'il y avait comme un Ruby one-liner qui le ferait d'une manière plus propre.

Merci de votre aide.

65
Pedro Cori

Vous cherchez #flatten :

concatenated = array_of_arrays.flatten

Par défaut, cela aplatira les listes récursivement. #flatten accepte un argument facultatif pour limiter la profondeur de récursivité - la documentation répertorie des exemples pour illustrer la différence.

149
millimoose

Ou plus généralement:

array_of_arrays.reduce(:concat)
27
d11wtq

Vous pouvez utiliser aplatir! méthode. par exemple. a = [ 1, 2, [3, [4, 5] ] ] a.flatten! #=> [1, 2, 3, 4, 5]

4
Pankaj