我一直在试图找出如何更有力地编写这个ruby代码有人有更好的解决方案吗?
a[:new] = {} if a[:new].nil?
a[:new].merge!( { new_key => new_value } )
有没有更优雅的方式来写这个?在处理嵌套哈希时,我遇到了很多问题,需要检查密钥是否存在,如果没有,创建它。
最佳答案
在Hash#to_h
和NilClass#to_h
的帮助下按如下方式编写
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}}