Я обнаружил, что лучший способ сделать это с помощью

y, что является наиболее выразительным способом отображения массива таким образом, что определенные элементы модифицируютсяа остальные остались нетронутыми?

Это простой способ сделать это:

old_a = ["a", "b", "c"]                         # ["a", "b", "c"]
new_a = old_a.map { |x| (x=="b" ? x+"!" : x) }  # ["a", "b!", "c"]

Если, конечно, этого недостаточно, то можно пропустить «одинокий» случай:

new_a = old_a.map { |x| x+"!" if x=="b" }       # [nil, "b!", nil]

Я хотел бы что-то вроде этого:

new_a = old_a.map_modifying_only_elements_where (Proc.new {|x| x == "b"}) 
        do |y|
          y + "!"
        end
# ["a", "b!", "c"]

Есть ли какой-нибудь хороший способ сделать это в Ruby (или, возможно, в Rails есть какой-то удобный метод, который я еще не нашел)?

Спасибо всем за ответ. В то время как вы все вместе убедили меня, что лучше всего использоватьmap с троичным оператором некоторые из вас отправили очень интересные ответы!

Ответы на вопрос(8)

Ваш ответ на вопрос