是否有一个与Ruby's '.dig`等效的方法,但它在何处赋值

ih99xse1  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(109)

假设我们在Ruby中使用.dig,如下所示:

some_hash = {}
some_hash.dig('a', 'b', 'c')

# => nil

返回nil
有没有一种方法可以在其他键存在的情况下给键c赋值?例如,如果我想设置c,我必须写:

some_hash['a'] = {} unless some_hash['a'].present?
  some_hash['a']['b'] = {} unless some_hash['a']['b'].present?
  some_hash['a']['b']['c'] = 'some value'

有没有更好的写法?

0h4hbjxa

0h4hbjxa1#

当你用如下的默认值初始化哈希值时,这可以很容易地实现:

hash = Hash.new { |hash, key| hash[key] = Hash.new(&hash.default_proc) }
hash[:a][:b][:c] = 'some value'
hash

# => {:a=>{:b=>{:c=>"some value"}}}

使用dig(除了最后一个键)可以部分地设置哈希中具有嵌套默认值的嵌套值:

hash.dig(:a, :b)[:c] = 'some value'
hash

# => {:a=>{:b=>{:c=>"some value"}}}

相关问题