【发布时间】:2012-03-14 19:14:41
【问题描述】:
在 Ruby 中,each、map 和 collect 的功能有什么区别吗?
【问题讨论】:
标签: ruby enumerable
在 Ruby 中,each、map 和 collect 的功能有什么区别吗?
【问题讨论】:
标签: ruby enumerable
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]
【讨论】:
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]
在Arrays 上还定义了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]"
【讨论】: