Я обнаружил, что лучший способ сделать это с помощью
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
с троичным оператором некоторые из вас отправили очень интересные ответы!