2009-05-29

Array#map {}.compact と Enumerable#select

なんかずっと混乱していた。

一文で言うと map は加工済みの結果を返せるけど、select のブロックの中身はあくまで一つ一つの要素そのものをふるいに掛けるためのものでしかなく、加工済みのデータを返すことはできない。

map の例

irb(main):001:0> (1..5).map { |e|
                   ( e % 2 > 0 ) ? 'e' + e.to_s : nil
                 }.compact
=> ["e1", "e3", "e5"]

select の例

irb(main):002:0> (1..5).select { |e|
                   ( e % 2 > 0 ) ? 'e' + e.to_s : nil
                 }
=> [1, 3, 5]

これは以下とまったく一緒

irb(main):003:0> (1..5).select { |e|
                   e % 2 > 0
                 }
=> [1, 3, 5]

分かってしまえば当たり前なんだけど、いざ書いてみると不慣れなときは何が起きているのかよく分からない。なんか久しぶりにこの感覚味わった。

About

例によって個人のなんちゃらです