En Ruby, ¿cuál es la forma más expresiva de mapear una matriz de tal manera que se modifiquen ciertos elementos y los demás no se hayan modificado?Asignar una matriz que modifique solo los elementos que coincidan con una determinada condición
Esta es una forma recta hacia adelante para hacerlo:
old_a = ["a", "b", "c"] # ["a", "b", "c"]
new_a = old_a.map { |x| (x=="b" ? x+"!" : x) } # ["a", "b!", "c"]
Omitiendo el caso de "dejar solos" por supuesto, si no es suficiente:
new_a = old_a.map { |x| x+"!" if x=="b" } # [nil, "b!", nil]
Lo que me gustaría es algo así como esto:
new_a = old_a.map_modifying_only_elements_where (Proc.new {|x| x == "b"})
do |y|
y + "!"
end
# ["a", "b!", "c"]
¿hay alguna buena manera de hacer esto en Rubí (o tal vez Carriles tiene algún tipo de método de conveniencia que no he encontrado todavía)?
Gracias a todos por responder. Mientras que colectivamente me convencieron de que es mejor usar map
con el operador ternario, ¡algunos de ustedes publicaron respuestas muy interesantes!
Creo que el elemento #map está bien tal como está. ;-) –
Sí, estoy de acuerdo. ¡Puedes eliminar los parens si eso te gusta más! –
Cerrado? FTL. Mira mi publicación = P –