通常,当元素传递到没有匹配键的哈希时,哈希返回nil
。
hsh = {1 => "one", 2 => "two"}
hsh[3] #=> nil
我想形成一个哈希值,如果没有匹配则返回传递给它的值。
hsh[3] #=> 3
我猜这个解决方案可能涉及某种lambda ......?
**现在我正在使用一种笨拙的解决方案,它使用条件方法来防止不匹配的密钥被传递到哈希..
答案 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