ruby - tutorial - Diferencia entre el mapa y cada
tutorial django (2)
Posible duplicado:
Ruby: ¿Cuál es la diferencia entre el mapa, cada uno y la colección?
También he buscado en Ruby-Doc, pero no puedo entender la diferencia entre
map
each
iteradores. Sería genial si pudieras dar un ejemplo y explicar.
each
devuelve el objeto original. Se utiliza para ejecutar una operación utilizando cada elemento de una matriz sin recopilar ninguno de los resultados. Por ejemplo, si desea imprimir una lista de números, puede hacer algo como esto:
arr = [1, 2, 3, 4]
arr.each { |n| puts n }
Ahora, eso puts
método anterior en realidad devuelve nil
. Algunas personas no lo saben, pero no importa mucho de todos modos; no hay ninguna razón real para recopilar ese valor (si desea convertir arr
en cadenas, debe usar arr.map(&:to_s)
o arr.map { |n| n.to_s }
.
map
devuelve los resultados del bloque que le pasas. Es una excelente manera de ejecutar una operación en cada elemento de una matriz y recuperar los resultados . Si desea multiplicar cada elemento de una matriz por 2, esta es la elección natural. Como beneficio adicional, puedes modificar el objeto original usando el map!
. Por ejemplo:
arr = [1, 2, 3, 4]
arr.map! { |n| n * 2}
# => [2, 4, 6, 8]
each
simplemente itera sobre el enumerable dado, ejecutando el bloque para cada valor. Descarta el valor de retorno del bloque, y cada uno simplemente devuelve el objeto original sobre el que fue llamado:
[1, 2, 3].each do |i|
i + 1
end # => [1, 2, 3]
Esta es simplemente una forma más agradable y universal de hacer una iteración tradicional for
bucles, y each
es muy preferido for
bucles en Ruby (de hecho, creo que nunca he usado un bucle for
en Ruby).
sin embargo, el map
itera sobre cada elemento, utilizando el valor de retorno del bloque para rellenar una nueva matriz en cada índice respectivo y devolver esa nueva matriz:
[1, 2, 3].map do |i|
i + 1
end # => [2, 3, 4]
Entonces, "asigna" cada elemento a uno nuevo utilizando el bloque dado, de ahí el nombre "mapa". Tenga en cuenta que ni each
ni el map
modifican la colección original.