我有一个哈希集合:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
我会使用什么语法来替换字符串中第一次出现的key
哈希集合value
?
例如我的输入字符串:
str = I want a 3
结果字符串将是:
str = I want a cat
答案 0 :(得分:19)
我的一个班轮:
hash.each { |k, v| str[k] &&= v }
或使用String#sub!
方法:
hash.each { |k, v| str.sub!(k, v) }
答案 1 :(得分:13)
"I want a %{b}" % {c: "apple", b: "bee", a: "cat"}
=> "I want a bee"
答案 2 :(得分:4)
假设Ruby 1.9或更高版本:
str.gsub /\d/, my_hash
答案 3 :(得分:3)
我不明白你的问题,但你可以试试这个:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
str = "I want a 3"
str.gsub(/[[:word:]]+/).each do |word|
my_hash[word] || word
end
#=> "I want a cat"
:d
答案 4 :(得分:3)
只是将点免费样式滥用添加到fl00r的答案:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
my_hash.default_proc = Proc.new {|hash, key| key}
str = "I want a 3"
str.gsub(/[[:word:]]+/).each(&my_hash.method(:[]))
答案 5 :(得分:2)
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
str = "I want a 3"
如果您想要替换的字符串没有任何一般模式,您可以使用:
str.sub /#{my_hash.keys.map { |s| Regexp.escape s }.join '|'}/, my_hash
但是如果有的话,代码变得更加简单,例如:
str.sub /[0-9]+/, my_hash
如果要替换所有出现的事件,而不仅仅是第一次出现,请使用gsub。
答案 6 :(得分:0)
您可以在ruby 1.9中使用String.sub:
string.sub(key, hash[key])
答案 7 :(得分:0)
以下代码将第一次出现的key
替换为给定字符串value
中的哈希集合str
str.gsub(/\w+/) { |m| my_hash.fetch(m,m)}
=> "I want a cat"