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