13

我有一个哈希集合: my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}

我将使用什么语法来替换字符串中第一次出现的keywith 哈希集合?value

例如我的输入字符串: str = I want a 3

结果字符串将是: str = I want a cat

4

8 回答 8

20

我的一个班轮:

hash.each { |k, v| str[k] &&= v }

或使用String#sub!方法:

hash.each { |k, v| str.sub!(k, v) }
于 2012-04-09T22:36:58.150 回答
15
"I want a %{b}" % {c: "apple", b: "bee", a: "cat"}
=> "I want a bee"
于 2015-03-17T19:22:52.883 回答
4

假设 Ruby 1.9 或更高版本:

str.gsub /\d/, my_hash
于 2014-06-10T20:49:15.283 回答
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

于 2012-04-09T22:34:57.607 回答
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(:[]))
于 2012-04-09T22:56:33.467 回答
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。

于 2012-11-25T23:46:35.050 回答
0

您可以在 ruby​​ 1.9中使用String.sub :

string.sub(key, hash[key])
于 2012-04-09T22:33:22.893 回答
0

以下代码替换给定字符串中第一次出现的keywith 哈希集合valuestr

 str.gsub(/\w+/) { |m| my_hash.fetch(m,m)}
    => "I want a cat"
于 2017-09-20T05:58:28.820 回答