在Ruby中,each
,map
和collect
的功能是否存在差异?
答案 0 :(得分:115)
each
与map
和collect
不同,但map
和collect
相同(技术上map
是{的别名{1}},但根据我的经验,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]
s上定义了map!
/ collect!
;他们修改了接收器:
Array
答案 1 :(得分:23)
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]