具有取决于键的默认值的散列

Hash with default value that depends on the key

我有一个字符串和一个散列,默认值为 "*":

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"

好的,我明白了。

而不是使用

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