Mapa de uma matriz modificando apenas elementos que correspondem a uma determinada condição
No Ruby, qual é a maneira mais expressiva de mapear uma matriz de maneira que certos elementos sejam modificados e os outros deixaram intocados?
Esta é uma maneira direta de fazer isso:
old_a = ["a", "b", "c"] # ["a", "b", "c"]
new_a = old_a.map { |x| (x=="b" ? x+"!" : x) } # ["a", "b!", "c"]
Omitir o caso "deixar sozinho", é claro, se não for suficiente:
new_a = old_a.map { |x| x+"!" if x=="b" } # [nil, "b!", nil]
O que eu gostaria é algo assim:
new_a = old_a.map_modifying_only_elements_where (Proc.new {|x| x == "b"})
do |y|
y + "!"
end
# ["a", "b!", "c"]
Existe alguma maneira legal de fazer isso no Ruby (ou talvez o Rails tenha algum tipo de método de conveniência que eu ainda não encontrei
Obrigado a todos por responderem. Enquanto você me convenceu coletivamente de que é melhor usarmap
com o operador ternário, alguns de vocês postaram respostas muito interessante