Как правило, для преобразования массива в другой массив в Ruby вы не используете метод each
, а вместо этого метод map
(код пользователя sflinter выше):
arr.map { |x| x == "red" ? "green" : x }
Или, если быть более общим, учитывая карту преобразования:
mapping = {'red' => 'green', 'blue' => 'yellow'}
мы можем сделать что-то вроде
p arr.map {|e| mapping[e] || e} # => ["green", "green", "yellow", "yellow"]
PS: Как предложил Phrogz ниже, map
создает новый экземпляр массива и, если вы планируете сохранить измененный массив в той же переменной, вам следует присвоить ему результат map
.
С другой стороны, есть злой близнец map
с именем map!
, который изменяет исходный массив на месте (поэтому нет необходимости присваивать его обратно), экономя некоторое пространство и время, но нарушая чистый функционал концепция программирования, что функции не должны иметь побочных эффектов.