Я только изучаю Ruby, так что извиняюсь, если это слишком новичок для здесь, но я не могу понять это из книги о кирке (вероятно, просто недостаточно внимательно читаю). В любом случае, если у меня есть такой массив:
arr = [1,2,3,4,5]
... и я хочу, скажем, умножить каждое значение в массиве на 3, я разработал это, выполнив следующие действия:
arr.each {|item| item *= 3}
... не дадут мне то, что я хочу (и я понимаю, почему, я не изменяю сам массив).
Я не понимаю, как изменить исходный массив из блока кода после итератора. Я уверен, это очень просто.
Чтобы напрямую изменить массив, используйте
arr.map! {|item| item*3}
. Чтобы создать новый массив на основе оригинала (что часто предпочтительнее), используйтеarr.map {|item| item*3}
. На самом деле, я всегда дважды думаю перед использованиемeach
, потому что обычно есть функция более высокого порядка, напримерmap
,select
или онаinject
делает то, что я хочу.источник
arr.map!{ destructive_op}
изменить навсегдаarr
?arr.collect! {|item| item * 3}
источник