问题
This question already has an answer here:
- what's different between each and collect method in Ruby [duplicate] 7 answers
In Ruby, is there any difference between the functionalities of each, map, and collect?
回答1:
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]"
回答2:
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