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