rubyのflat_mapって何?

Use the `flat_map` method. · d56b5da · rails/rails
を見ていて、へーと思ったのでメモ。

# before
attributes.map do |attribute|
  _validators[attribute.to_sym]
end.flatten

# after
attributes.flat_map do |attribute|
  _validators[attribute.to_sym]
end
>> [[1,2],[3,4]].map { |i| i }
=> [[1, 2], [3, 4]]

>> [[[1,2],[3,4]],[5,6]].flat_map { |i| i }
=> [[1, 2], [3, 4], 5, 6]

入れ子の配列をmapしてflattenするというそのまんまですが
ふ〜ん、こんなのあったんですね。



20121006 速攻revertされた

Revert "Use flat_map { } instead of map {}.flatten" · a0613ad · rails/rails


理由は、上記の例でもあるように、flattenを使うと階層化した配列も1次の配列にしてくれるんだけど
flat_mapだとそれができないからのようです。

irb(main):002:0> [[[1,3], [1,2]]].map{|i| i}.flatten
=> [1, 3, 1, 2]
irb(main):003:0> [[[1,3], [1,2]]].flat_map{|i| i}
=> [[1, 3], [1, 2]]