根据哈希修改字符串

时间:2014-04-16 08:39:58

标签: ruby

我想基于哈希转换字符串。例如,当散列包含"assistant director""asst dir"时,字符串"assistant"=>"asst"会转换为"director"=>"dir"。我想做点什么:

hash = Hash["executive"=>"exec","assistant"=>"asst","associate"=>"assoc","director"=>"dir"]
str = "assistant director"

hash.each { |k, v| str.gsub!(k, v) }  
# => "asst dir"

基于this post

hash.each { |k, v| str.gsub!(k, v) }

应该是答案。但它不会返回转换后的字符串。 str也没有改变。

2 个答案:

答案 0 :(得分:4)

另一种方法是: -

str.gsub!(/\w+/, hash)

String#gsub!

  

如果第二个参数是Hash,匹配的文本是其中一个键,则相应的值是替换字符串。

答案 1 :(得分:2)

hash.each { |k, v| str.gsub!(k, v) }将返回hash.to_a,但与您使用gsub!无关,这意味着您的str已更改。只需:

hash.each { |k, v| str.gsub!(k, v) }  
str     #=> "asst dir"