Estoy aprendiendo a Ruby, así que me disculpo si esto es demasiado novato por aquí, pero no puedo resolver esto con el libro de la piqueta (probablemente no estoy leyendo con suficiente atención). De todos modos, si tengo una matriz como esta:
arr = [1,2,3,4,5]
... y quiero, digamos, multiplicar cada valor en la matriz por 3, lo he resuelto haciendo lo siguiente:
arr.each {|item| item *= 3}
... no me dará lo que quiero (y entiendo por qué, no estoy modificando la matriz en sí).
Lo que no entiendo es cómo modificar la matriz original desde el interior del bloque de código después del iterador. Seguro que es muy fácil.
Para modificar directamente la matriz, use
arr.map! {|item| item*3}
. Para crear una nueva matriz basada en la original (que a menudo es preferible), usearr.map {|item| item*3}
. De hecho, siempre lo pienso dos veces antes de usareach
, porque generalmente hay una función de orden superior comomap
,select
oinject
que hace lo que quiero.fuente
arr.map!{ destructive_op}
cambiar permanentementearr
?arr.collect! {|item| item * 3}
fuente