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

Rah*_*hul 60 ruby enumerable

在Ruby中,有没有的功能有什么区别each,mapcollect

Cho*_*ett 116

each不同于mapcollect,但是map并且collect是相同的(技术上map是别名collect,但在我的经验map中使用更频繁).

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

[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8
Run Code Online (Sandbox Code Playgroud)

mapcollect生成一个新的,Array包含应用于接收器的每个元素的块的结果:

[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]
Run Code Online (Sandbox Code Playgroud)

s还有map!/ collect!定义Array; 他们修改了接收器:

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]"
Run Code Online (Sandbox Code Playgroud)

  • map是社区选择的版本https://github.com/bbatsov/ruby-style-guide#map-fine-select-reduce-size (2认同)

Rub*_*ner 23

Each将评估块,但抛弃Each块的评估结果并返回原始数组.

irb(main):> [1,2,3].each {|x| x*2}
=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

Map/ collect返回一个数组,该数组是为数组中每个项调用块而构造的.

irb(main):> [1,2,3].collect {|x| x*2}
=> [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)