2010-09-02 49 views
11

使用数组collect和each之间的主要区别是什么?偏爱?收集和每个之间的显着差异?

some = [] 

some.collect do {|x| puts x} 

some.each do |x| 
    puts x 
end 
+3

这是红宝石,而不是回报率,具体..你可以编辑标题。 – randomguy 2010-09-02 20:08:21

+0

已被授权删除rails标签,因为这是一个红宝石问题 – 2010-09-02 20:10:28

回答

35

array = []是快捷方式,以限定一个数组对象(长形式:array = Array.new

Array#collect(和Array#map)返回基于在块传递的代码的新数组。 Array#each对数组的每个元素执行操作(由块定义)。

我会用收集这样的:

array = [1, 2, 3] 
array2 = array.collect {|val| val + 1} 

array.inspect # => "[1, 2, 3]" 
array2.inspect # => "[2, 3, 4]" 

而且每个这样的:

array = [1, 2, 3] 
array.each {|val| puts val + 1 } 
# >> 2 
# >> 3 
# >> 4 
array.inspect # => "[1, 2, 3]" 

希望这有助于...

+2

+1以获得清晰简洁的解释 – 2010-09-02 20:11:29

+0

非常感谢您的示例。 – RoR 2010-09-02 20:43:21

+0

我也感谢你这么好的解释。我在codecademy的用户论坛上提出了同样的问题,并得到了两个自我重要的混乱的回应。仿佛这是世界上最愚蠢的问题,我应该为此而感到羞耻。 – 2016-12-12 21:56:59

4

collect(或map)将“保存”在do块的返回值在一个新的数组,并返回它,例如:

some = [1,2,3,10] 
some_plus_one = some.collect {|x| x + 1} 
# some_plus_one == [2,3,4,11] 

each只会执行做块的每个项目并不会保存返回值。

+0

非常感谢您的回复。所以基本上与收集,在同一时间通过块它也将值保存到一个新的数组。所以.collect有点像每个块,但是用每个块的返回值返回一个数组?所以收集和地图是一回事吗?地图已被弃用或任何东西?任何一个优先于另一个? – RoR 2010-09-02 20:42:26

+3

'map'和'collect'是一样的东西(同样的方法),它只是不同的命名约定。 – adamse 2010-09-02 20:55:14