LoginSignup
83
70

More than 5 years have passed since last update.

map, select, collect, each の違いところ

Last updated at Posted at 2016-05-29

Map

mapメソッドは要素の数だけ繰り返しブロックを実行し、ブロックの戻り値を集めた配列を作成して返します。もしブロックの戻り値がない場合は、配列にnilを入れます。

[1,1,1,2,3,4].map{|n| n*3 if n==1}    
 => [3, 3, 3, nil, nil, nil] 

map!メソッドはmapメソッドの戻り値と同じですが、各要素をブロックの戻り値と入れ替えます。

Collect

mapメソッドと同じです。

Select

selectメソッドは、条件に合う要素を探して集めます。ブロック引数itemに要素を入れながらブロックを繰り返し、ブロックの戻り値が真になったときの要素を集め、新しい配列にして返します

[1, 2, 3, 4, 5, 6, 7, 8].select {|item| item % 2 == 0 }
 => [2, 4, 6, 8]

Each

eachメソッドは、配列の要素の数だけブロックを繰り返し実行します。繰り返しごとにブロック引数には各要素が順に入ります。戻り値はレシーバ自身です。

[1,2,3].each{ |n| n*2 }
 => [1,2,3]

どうやってmapとcollectの結果を組立つメソッドになりましょうか

mapメソッドを利用して、compactメソッドをnilがある値を消しましょう。

result = [1,1,1,2,3,4].map{|n| n*3 if n==1}
 => [3, 3, 3, nil, nil, nil]
result.compact
 => [3, 3, 3] 

参考

83
70
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
70