Ruby on rails - 创建具有 3 个嵌套级别的哈希的干净方法,如果它们不存在,则会创建级别



我现在是这样做的

h = Hash.new { |h1, k1| h1[k1] = Hash.new { |h2, k2| h2[k2] = {} } }

虽然它可以工作,但它看起来有点模糊。也许有更好的方法来做同样的事情?

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

然后你可以随意分配,

h[:a][:b][:c][:d] = 3

参考:裁判

您可以像这样递归地创建一个。

def create n
  return {} if n == 0
  Hash.new {|h, k| h[k] = create(n - 1)}
end
h  = create 3
h[1][1][1] = 2
p h[1][1][1]       # => 2
p h[2][1][2]       # => {}
h[2][1][2] = 3
p h                # => {1=>{1=>{1=>2}}, 2=>{1=>{2=>3}}}

代码是正确的。你可以把它分类:

class NestedHash < Hash
  def initialize(depth)
    self.default_proc = Proc.new {|h,k| h[k] = NestedHash.new(depth-1)} if depth && depth > 1
  end
end
h = NestedHash.new(3)

相关内容

  • 没有找到相关文章

最新更新