eachはブロックの引数を返す。
mapはブロックの戻り値を返す。
each
`a=[1,2,3] b = a.each do |n| n+2`と定義したとき、
b = [1,2,3]
となる。
ブロックでn+2と定義しているが、eachは引数をそのまま返すため、引数としての配列の要素は出力時にも変わらない。
map
`a=[1,2,3] b = a.map do {|n| n+2}`と定義したとき、
b = [3,4,5]
となる。
mapはブロックの戻り値を返すため、配列のそれぞれの要素nを+2した要素により構成されている配列を返す。
条件がついたとき
`a=[1,2,3] b = a.map do {|n| n+2 if n=4}`とmapの戻り値をifで条件づけたとき、
b = [nil,4,nil]
配列の要素のうち条件に含まれない部分はnilとして出力される。
nilとして空白を含む配列ではなく、実数のみで構成される配列を返したい場合はselectを使う。