当密钥不存在时,从Hash#[]返回self(而不是nil)

时间:2013-08-26 17:08:53

标签: ruby hash

通常,当元素传递到没有匹配键的哈希时,哈希返回nil

hsh = {1 => "one", 2 => "two"}
hsh[3] #=> nil

我想形成一个哈希值,如果没有匹配则返回传递给它的值。

hsh[3] #=> 3

我猜这个解决方案可能涉及某种lambda ......?

**现在我正在使用一种笨拙的解决方案,它使用条件方法来防止不匹配的密钥被传递到哈希..

2 个答案:

答案 0 :(得分:8)

如果您只想返回新值但不想添加它们:

 h = Hash.new { |_hash, key| key }

要最初填充此哈希,您可以执行以下操作:

 h.merge( {1 => "one", 2 => "two"} )

如果已经创建了哈希*:

 h.default_­proc = proc do |_hash,key|
     key
 end

#h[3]
#=> 3

* 仅限于ruby 1.9及以上

答案 1 :(得分:1)

试试这个:

hsh.default_proc = proc do |hash, key|
  hash[key] = key
end

要仅返回密钥,这是一个微不足道的变化:

hsh.default_proc = proc do |hash, key|
  key
end