我有一个散列收集:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
如果我想要用散列收集中的值替换字符串中第一次出现的键,应该使用什么语法?
例如,我的输入字符串是:
str = I want a 3
结果字符串将是:
str = I want a cat
我有一个散列收集:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
如果我想要用散列收集中的值替换字符串中第一次出现的键,应该使用什么语法?
例如,我的输入字符串是:
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) }
String#[]=
和 &&=
。 - PhrogzString#[]
给定字符串,则查找并返回其子字符串引用。因此,如果我们将某些内容分配给它,我们将更改字符串的给定部分。最后,我们将它们连接在一起,如果在字符串中找到子字符串,则用哈希值替换它。 - Hauleth"I want a %{b}" % {c: "apple", b: "bee", a: "cat"}
=> "I want a bee"
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])
hash
而不是 hash[key]
即my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
my_str = 'I want a 3'
puts my_str.sub('3', my_hash) # => 'I want a cat'
- Matthew Hanniganvalue
替换给定字符串str
中第一次出现的key
。 str.gsub(/\w+/) { |m| my_hash.fetch(m,m)}
=> "I want a cat"
str = I want a {3}
(.NET 字符串格式化)。 - Matthew Flaschenh = {pet: "cat"}
,你可以这样做:"I want a %{pet}" % h #=> "I want a cat"
。 - Mark Thomas