具有取决于密钥的默认值的哈希值

时间:2016-05-12 23:48:10

标签: ruby hash default

我有一个字符串和一个默认值为"*"的哈希:

my_string = "a b c d"
my_hash = Hash.new("*")
my_hash["a"] = 1
my_hash["b"] = 2

然后我做

new_string = my_string.gsub(/[abcd]/, my_hash)
# => "1 2 * *"

如何让new_string还包含在my_hash中无法找到并且

的字符串
new_string # => "1 2 *c *d"

2 个答案:

答案 0 :(得分:3)

好吧,我明白了。

而不是使用

将my_hash的默认值设置为“*”
my_hash = Hash.new("*")

我做

my_hash = Hash.new{|h,k| h[k] = "*" + k}

现在,如果找到要替换的字符串但在my_hash中没有相应的键(在本例中为“c”和“d”),我将其替换为默认的my_hash值及其本身。

现在new_string是

"1 2 *c *d"

答案 1 :(得分:3)

my_hash = Hash.new{|_, k| "*#{k}"}
my_hash["a"] = 1
my_hash["b"] = 2
my_string.gsub(/[abcd]/, my_hash)
# => "1 2 *c *d"