map,each和collect之间有什么区别?

时间:2012-02-24 10:20:22

标签: ruby enumerable

在Ruby中,eachmapcollect的功能是否存在差异?

2 个答案:

答案 0 :(得分:115)

eachmapcollect不同,但mapcollect相同(技术上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]