Rubyでは、each
、map
、およびcollect
の機能に違いはありますか?
each
はmap
およびcollect
とは異なりますが、map
とcollect
は同じです(技術的にはmap
はcollect
のエイリアスですが、私の経験ではmap
がより頻繁に使用されています)。
each
は、(Enumerable
)レシーバーの各要素に対して囲まれたブロックを実行します。
[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8
map
およびcollect
は、レシーバーの各要素に適用されたブロックの結果を含む新しいArray
を生成します。
[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]
Array
sで定義されているmap!
/collect!
もあります。レシーバーを変更します:
a = [1,2,3,4]
a.map {|n| n*2} # => [2,4,6,8]
puts a.inspect # prints: "[1,2,3,4]"
a.map! {|n| n+1}
puts a.inspect # prints: "[2,3,4,5]"
Each
はブロックを評価しますが、Each
ブロックの評価の結果を破棄し、元の配列を返します。
irb(main):> [1,2,3].each {|x| x*2}
=> [1, 2, 3]
Map
/collect
は、配列内の各項目のブロックを呼び出した結果として構築された配列を返します。
irb(main):> [1,2,3].collect {|x| x*2}
=> [2, 4, 6]