map、each 和 collect 有啥区别? [复制]

Posted

技术标签:

【中文标题】map、each 和 collect 有啥区别? [复制]【英文标题】:What is the difference between map, each, and collect? [duplicate]map、each 和 collect 有什么区别? [复制] 【发布时间】:2012-03-14 19:14:41 【问题描述】:

在 Ruby 中,eachmapcollect 的功能有什么区别吗?

【问题讨论】:

【参考方案1】:

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]

【讨论】:

【参考方案2】:

each 不同于mapcollect,但mapcollect 是相同的(技术上mapcollect 的别名,但根据我的经验使用map更频繁)。

each 为 (Enumerable) 接收器中的每个元素执行封闭块:

[1,2,3,4].each |n| puts n*2
# Outputs:
# 2
# 4
# 6
# 8

mapcollect 生成一个新的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]"

【讨论】:

地图是社区选择的版本github.com/bbatsov/ruby-style-guide#map-fine-select-reduce-size

以上是关于map、each 和 collect 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

async.map 或 async.each 与 async.parallel 有啥区别?

ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有啥区别?

$.each(selector) 和 $(selector).each() 有啥区别

for each 和 for_each 有啥区别?

List 、Set、 Map有啥区别和联系

Ruby on Rails 活动记录查询(.each、.collect、.map ...?)