【问题标题】:Create key if it doesn't exist in nested hashes如果嵌套哈希中不存在密钥,则创建密钥
【发布时间】:2014-02-24 12:30:02
【问题描述】:

我一直试图弄清楚如何更雄辩地编写这个 ruby​​ 代码。有人有更好的解决方案吗?

a[:new] = {} if a[:new].nil?
a[:new].merge!( { new_key => new_value } )

有没有办法以更优雅的方式编写这个?在处理需要检查键是否存在的嵌套哈希时,我经常遇到这种情况,如果不存在,则创建它。

【问题讨论】:

  • 试试看a[:new]||= {}

标签: ruby-on-rails ruby


【解决方案1】:

Hash#to_hNilClass#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}}

【讨论】:

    【解决方案2】:

    在开始时这样做:

    a = Hash.new{|h, k| h[k] = {}}
    

    那么,不管a是否有密钥:new,做

    a[:new].merge!(new_key => new_value)
    

    a[:new][new_key] = new_value
    

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      相关资源
      最近更新 更多