2010-09-02 30 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

相關問題