2010-09-02 16 views
11

Usando arreglos ¿cuál es la principal diferencia entre recoger y cada uno? ¿Preferencia?Distinctive difference between collect and each?

some = [] 

some.collect do {|x| puts x} 

some.each do |x| 
    puts x 
end 
+3

Esta es Ruby, no RoR, específico que .. podría editar el título. – randomguy

+0

se retiró para eliminar la etiqueta de los rieles ya que esta es una pregunta de ruby ​​ –

Respuesta

35

array = [] es un atajo para definir un objeto array (forma larga: array = Array.new)

Array#collect (y Array#map) devolver una nueva matriz basado en el código pasado en el bloque. Array#each realiza una operación (definida por el bloque) en cada elemento de la matriz.

me gustaría utilizar recoger la siguiente manera:

array = [1, 2, 3] 
array2 = array.collect {|val| val + 1} 

array.inspect # => "[1, 2, 3]" 
array2.inspect # => "[2, 3, 4]" 

Y cada uno como esto:

array = [1, 2, 3] 
array.each {|val| puts val + 1 } 
# >> 2 
# >> 3 
# >> 4 
array.inspect # => "[1, 2, 3]" 

Espero que esto ayude ...

+2

+1 para una explicación clara y sucinta –

+0

Muchas gracias por el ejemplo. – RoR

+0

También te agradezco por tan buena explicación. Hice la misma pregunta en el foro de usuarios de codecademy y obtuve dos respuestas condescendientes de un par de idiotas auto-importantes. Como si fuera la pregunta más estúpida del mundo, y debería avergonzarme por haberla formulado. –

4

collect (o map) será "salvar" a los valores de retorno del bloque do en una nueva matriz y devolverlo, ejemplo:

some = [1,2,3,10] 
some_plus_one = some.collect {|x| x + 1} 
# some_plus_one == [2,3,4,11] 

each sólo ejecutará el bloque de hacerlo para cada elemento y no guardará el valor de retorno.

+0

Muchas gracias por su respuesta. Básicamente, con collect, al mismo tiempo pasar por el bloque también guarda los valores en una nueva matriz. Entonces, ¿un .collect es algo así como de cada uno, pero con devolver una matriz con valores de retorno de cada uno de los bloques? ¿Entonces recopilar y mapear son lo mismo? ¿El mapa está obsoleto o algo así? ¿Alguna preferencia una sobre la otra? – RoR

+3

'map' y' collect' son la misma cosa (el mismo método), solo son diferentes convenciones de nombres. – adamse