2012-02-24 9 views

Respuesta

107

each es diferente de map y collect, pero map y collect son los mismos (técnicamente map es un alias para collect, pero en mi experiencia map se utiliza con mucha más frecuencia).

each realiza el bloque cerrado para cada elemento de la (Enumerable) receptor:

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

map y collect producir un nuevo Array que contiene los resultados del bloque aplicado a cada elemento del receptor:

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

También hay map!/collect! definidos en Array s; que modifican el receptor en su lugar:

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

mapa es la versión elegido por la comunidad https://github.com/bbatsov/ruby-style-guide#map-fine-select-reduce-size –

21

Each evaluará el bloque, pero desecha el resultado de la evaluación del bloque Each y devuelve la matriz original.

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

Map/collect devolver una matriz construida como resultado de la llamada del módulo para cada elemento de la matriz.

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