В Ruby, какой самый выразительный способ отобразить массив таким образом, чтобы некоторые элементы были изменены , а другие остались нетронутыми ?
Это простой способ сделать это:
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
с троичным оператором, некоторые из вас отправили очень интересные ответы!