我一直在试图弄清楚如何更有说服力地编写这个ruby代码。有人有更好的解决方案吗?
a[:new] = {} if a[:new].nil?
a[:new].merge!( { new_key => new_value } )
有没有办法以更优雅的方式写这个?在处理需要检查密钥是否存在的嵌套哈希时,我遇到了很多,如果不存在,则创建它。
答案 0 :(得分:1)
a[:new] = a[:new].to_h.merge( { new_key => new_value } )
示例:
hsh1[:a] # => nil
hsh1[:a] = hsh1[:a].to_h.merge({1=>2})
hsh1[:a] # => {1=>2}
hsh2 = {:a => {'k' => 2}}
hsh2[:a] # => {"k"=>2}
hsh2[:a] = hsh2[:a].to_h.merge({1=>2})
hsh2 # => {:a=>{"k"=>2, 1=>2}}
答案 1 :(得分:0)
一开始就这样做:
a = Hash.new{|h, k| h[k] = {}}
然后,在不关心a
是否有:new
键的情况下,做
a[:new].merge!(new_key => new_value)
或
a[:new][new_key] = new_value