Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby – 如果哈希[‘a’]不存在,如何分配哈希[‘a’] [‘b’] =’c’大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有什么比简单的方法吗
if hash.key?('a')
  hash['a']['b'] = 'c' 
else  
  hash['a'] = {}
  hash['a']['b'] = 'c' 
end

解决方法

最简单的方法是 construct your Hash带块参数:
hash = Hash.new { |h,k| h[k] = { } }
hash['a']['b'] = 1
hash['a']['c'] = 1
hash['b']['c'] = 1
puts hash.inspect
# "{"a"=>{"b"=>1,"c"=>1},"b"=>{"c"=>1}}"

这个新的表单创建一个新的空的哈希作为默认值.你不想这样:

hash = Hash.new({ })

因为这将为所有默认条目使用完全相同的哈希.

另外,正如Phrogz所说,您可以使用自动生成的哈希自动生default_proc

hash = Hash.new { |h,k| h[k] = Hash.new(&h.default_proC) }

更新:我想我应该澄清我对Hash.new({})的警告.当你这样说:

h = Hash.new({ })

这很像这样说:

h = Hash.new
h.default = { }

然后,当你访问h来分配一些东西作为h [:k] [:m] = y,它的行为就好像你这样做:

if(h.has_key?(:k))
    h[:k][:m] = y
else
    h.default[:m] = y
end

然后,如果你[:k2] [:n] = z,你最终会分配h.default [:n] = z.请注意,h仍然说h.has_key?(:k)是假的.

但是,当你这样说:

h = Hash.new(0)

一切都会好起来的,因为你永远不会在这里修改h [k],你只会从h读取一个值(如果需要的话会使用默认值),或者为h分配一个新值.

大佬总结

以上是大佬教程为你收集整理的ruby – 如果哈希[‘a’]不存在,如何分配哈希[‘a’] [‘b’] =’c’全部内容,希望文章能够帮你解决ruby – 如果哈希[‘a’]不存在,如何分配哈希[‘a’] [‘b’] =’c’所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。