Aplatir vos tableaux
flat_map défini dans Enumerable fait 2 choses :
- Elle transforme les données comme
map - Elle « aplatit » d’un niveau le résultat de chaque transformation si c’est un tableau
Tout comme map a un alias collect, flat_map a un alias collect_concat !

flatten est lui défini pour Array et Hash et ne fait qu’une chose, il « aplatit » les tableaux, mais la profondeur est paramétrable. Pour Array, la profondeur par défaut est illimitée, pour Hash, elle est de 1 ! Une valeur négative indique une profondeur illimitée.

L’utilisation de l’un ou l’autre dépendra du contexte. Cependant le cas courant concerne 1 niveau, et alors flat_map est en moyenne 2 fois plus performant que map { ... }.flatten.
Les liens vers la documentation Ruby de flat_map, Hash#flatten et Array#flatten.