Carte un tableau en modifiant uniquement les éléments correspondant à une certaine condition

En Ruby, ce qui est le plus expressif pour cartographier un tableau de telle manière que certains éléments sont modifiés et les autres laissés intacts?

C'est une simple façon de le faire:

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

En omettant le "laissez-le seul" cas bien sûr, si pas assez:

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

Ce que je voudrais, c'est quelque chose comme ceci:

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

Est-il une bonne façon de le faire en Ruby (ou peut-être Rails a une sorte de méthode de convenance que je n'ai pas encore trouvé)?


Merci à tous pour la réponse. Alors que vous avez collectivement m'a convaincu qu'il est préférable d'utiliser map avec l'opérateur ternaire, certains d'entre vous posté des réponses très intéressantes!

  • Je pense que le #map chose est très bien comme il est. 😉
  • Ouais, je suis d'accord. Vous pouvez prendre les parens si ça fait de vous l'aimez plus!
  • Fermé? FTL. Regarde mon post =P
  • Je suis venu ici à la recherche d'un moyen de ne retenir que certains éléments, et j'ai trouvé cela très utile: stackoverflow.com/questions/5152098/...
InformationsquelleAutor Yang Meyer | 2009-03-05