1. ホーム
  2. ruby

[解決済み】Rubyでハッシュのすべての値を変更する

2022-04-13 23:05:38

質問

ハッシュのすべての値を変更し、値の前後に'%'を追加したい。

{ :a=>'a' , :b=>'b' }

は、次のように変更する必要があります。

{ :a=>'%a%' , :b=>'%b%' }

どうすればいいのでしょうか?

どのように解決するのですか?

実際の文字列自体をその場で変異させたい場合(同じ文字列オブジェクトへの他の参照に影響を与える可能性があり、望ましいことですが)。

# Two ways to achieve the same result (any Ruby version)
my_hash.each{ |_,str| str.gsub! /^|$/, '%' }
my_hash.each{ |_,str| str.replace "%#{str}%" }

ハッシュはその場で変更したいが、文字列には影響を与えたくない場合(新しい文字列を取得させたい)。

# Two ways to achieve the same result (any Ruby version)
my_hash.each{ |key,str| my_hash[key] = "%#{str}%" }
my_hash.inject(my_hash){ |h,(k,str)| h[k]="%#{str}%"; h }

新しいハッシュが欲しい場合。

# Ruby 1.8.6+
new_hash = Hash[*my_hash.map{|k,str| [k,"%#{str}%"] }.flatten]

# Ruby 1.8.7+
new_hash = Hash[my_hash.map{|k,str| [k,"%#{str}%"] } ]