Estou apenas aprendendo Ruby, então me desculpe se isso for muito novo por aqui, mas não consigo resolver isso no livro de picaretas (provavelmente não estou lendo com cuidado o suficiente). De qualquer forma, se eu tiver uma matriz como esta:
arr = [1,2,3,4,5]
... e eu quero, digamos, multiplicar cada valor na matriz por 3, eu trabalhei fazendo o seguinte:
arr.each {|item| item *= 3}
... não vai me dar o que eu quero (e eu entendo porque, não estou modificando o array em si).
O que eu não entendo é como modificar a matriz original de dentro do bloco de código após o iterador. Tenho certeza de que isso é muito fácil.
Para modificar diretamente a matriz, use
arr.map! {|item| item*3}
. Para criar um novo array baseado no original (o que geralmente é preferível), usearr.map {|item| item*3}
. Na verdade, sempre penso duas vezes antes de usareach
, porque geralmente há uma função de ordem superior comomap
,select
ouinject
faz o que eu quero.fonte
arr.map!{ destructive_op}
mudar permanentementearr
?arr.collect! {|item| item * 3}
fonte