Techioz Blog

gsubメソッドを一度だけ変更する方法

概要

タイトルをうまく説明できないのでうまく表現できませんでしたが、もしタイトルがあったとしたら、次のようなものがあるとしましょう。

puts ("red, blue").gsub("red", "blue").gsub("blue", "red")

「赤、青」が反対の「青、赤」になるようにしたいのですが、「赤」が「青」になり、「青」がまた「赤」になるので、それは機能しません。

「幸せ」という単語のすべてのインスタンスを「悲しい」に置き換えたり、その逆を行う別の方法を作成したいと考えてこれを試しました。

解決策

置換をハッシュとして提供できます。パターンに一致するキー (文字列である必要があります)、値は置換されます。

>> "red, blue, blue, green".gsub(/red|blue/, {"red" => "blue", "blue" => "red"})
=> "blue, red, red, green"
>> "happy happy sad".gsub(/sad|happy/, {"sad" => "happy", "happy" => "sad"})
=> "sad sad happy"

より複雑な操作の場合:

"happy happy sad red blue".gsub(/\w+/) do |m|
  case m
  when "happy" then "red"
  when "sad"   then "blue"
  when "red"   then "sad"
  when "blue"  then "happy"
  end
end
=> "red red blue sad happy"

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://rubyapi.org/3.3/o/string#class-String-label-Substitution+Methods