地图,每个和收集有什么区别?
在Ruby中, each
, map
和collect
的function是否有区别?
each
都不同于map
和collect
,但map
和collect
是相同的(技术上map
是collect
的别名,但在我的经验map
使用更频繁)。
( Enumerable
)接收器中的每个元素each
执行封闭的块:
[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]
还有map!
/ collect!
在Array
s上定义; 他们修改接收器:
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]"
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]