2012-02-24 10 views

risposta

107

each è diverso da map e collect, ma map e collect sono gli stessi (tecnicamente map è un alias per collect, ma nella mia esperienza map è usato molto più spesso).

each esegui blocco chiusa per ciascun elemento del (Enumerable) Ricevitore:

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

map e collect produrre un nuovo Array contenente i risultati del blocco applicato a ciascun elemento del ricevitore:

[1,2,3,4].map {|n| n*2} 
# => [2,4,6,8] 

C'è anche map!/collect! definito su Array s; modificano il ricevitore al suo posto:

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]" 
+2

mappa è la versione scelta dalla community https://github.com/bbatsov/ruby-style-guide#map-fine-select-reduce-size –

21

Each valuterà il blocco, ma getta via il risultato della valutazione Each del blocco e restituisce la matrice originale.

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

Map/collect ritorno un array costruito come il risultato della chiamata al blocco per ogni elemento dell'array.

irb(main):> [1,2,3].collect {|x| x*2} 
=> [2, 4, 6] 
Problemi correlati