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]]