This question already has an answer here:
In Ruby, is there any difference between the functionalities of each, map, and collect?
each is different from map and collect, but map and collect are the same (technically map is an alias for collect, but in my experience map is used a lot more frequently).
each performs the enclosed block for each element in the (Enumerable) receiver:
[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8
map and collect produce a new Array containing the results of the block applied to each element of the receiver:
[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]
There's also map! / collect! defined on Arrays; they modify the receiver in place:
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 will evaluate the block but throws away the result of Each block's evaluation and returns the original array.
irb(main):> [1,2,3].each {|x| x*2}
=> [1, 2, 3]
Map/collect return an array constructed as the result of calling the block for each item in the array.
irb(main):> [1,2,3].collect {|x| x*2}
=> [2, 4, 6]
来源:https://stackoverflow.com/questions/9429034/what-is-the-difference-between-map-each-and-collect