Mar*_*kus 3 ruby hash default-value
像这样设置哈希的默认值:
hash = Hash.new { |hsh, key| hsh[key] = {} }
Run Code Online (Sandbox Code Playgroud)
将为未知密钥创建(并分配)新哈希,但将返回nil创建哈希的未知密钥:
hash[:unkown_key] #=> {}
hash[:unkown_key][:nested_unknown] #=> nil
Run Code Online (Sandbox Code Playgroud)
我可以让它适用于第二级,如下所示:
hash = Hash.new do |hsh, key|
hsh[key] = Hash.new { |nest_hsh, nest_key| nest_hsh[nest_key] = {} }
end
Run Code Online (Sandbox Code Playgroud)
但是,它在第三级不起作用:
hash[:unkown_key][:nested_unknown] #=> {}
hash[:unkown_key][:nested_unknown][:third_level] #=> nil
Run Code Online (Sandbox Code Playgroud)
如何让它在任意级别工作?
hash[:unkown_key][:nested_unknown][:third_level][...][:nth_level] #=> {}
Run Code Online (Sandbox Code Playgroud)
心灵弯曲的类型,但您可以将哈希值传递default_proc给内部哈希:
hash = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
hash[:foo] #=> {}
hash[:foo][:bar] #=> {}
hash[:foo][:bar][:baz] #=> {}
hash #=> {:foo=>{:bar=>{:baz=>{}}}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |