我有一个哈希集合:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
我将使用什么语法来替换字符串中第一次出现的key
with 哈希集合?value
例如我的输入字符串:
str = I want a 3
结果字符串将是:
str = I want a cat
我有一个哈希集合:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
我将使用什么语法来替换字符串中第一次出现的key
with 哈希集合?value
例如我的输入字符串:
str = I want a 3
结果字符串将是:
str = I want a cat
我的一个班轮:
hash.each { |k, v| str[k] &&= v }
或使用String#sub!
方法:
hash.each { |k, v| str.sub!(k, v) }
"I want a %{b}" % {c: "apple", b: "bee", a: "cat"}
=> "I want a bee"
假设 Ruby 1.9 或更高版本:
str.gsub /\d/, my_hash
我不明白你的问题,但你可以试试这个:
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
只是为了在 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(:[]))
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。
您可以在 ruby 1.9中使用String.sub :
string.sub(key, hash[key])
以下代码替换给定字符串中第一次出现的key
with 哈希集合value
str
str.gsub(/\w+/) { |m| my_hash.fetch(m,m)}
=> "I want a cat"