with tutorial framework espaƱol djangoproject desde con cero applications ruby map

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.