each
simplemente itera sobre el enumerable dado, ejecutando el bloque para cada valor. Se descarta el valor de retorno del bloque, y cada uno simplemente devuelve el objeto original se llamaba en:
[1, 2, 3].each do |i|
i + 1
end # => [1, 2, 3]
Esto es simplemente una manera más agradable, más universal de hacer un tradicional bucle de iteración for
y each
es mucho prefirió más de for
bucles en Ruby (de hecho, no creo que alguna vez haya usado un bucle for
en Ruby).
map
, sin embargo, itera sobre cada elemento, utilizando el valor de retorno del bloque para rellenar una nueva matriz en cada índice respectivo y regresar esa nueva matriz:
[1, 2, 3].map do |i|
i + 1
end # => [2, 3, 4]
por lo que "mapas" que cada elemento uno nuevo usando el bloque dado, de ahí el nombre "mapa". Tenga en cuenta que ni each
ni map
modifican la colección original.
... y además de las respuestas de Andrew y Bryan agrego que hay otro método llamado * collect * que es exactamente igual a * map *;) –
Yup, 'map' &' collect' son equivalentes. Aunque nunca me gustó el nombre "recoger", ya que no creo que realmente describa lo que hace muy bien. –