2

これが私が今していることです

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

動作しますが、あいまいに見えます。たぶん、同じことをするためのより良い方法がありますか?

4

3 に答える 3

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

その後、あなたはとにかくあなたが好きなように割り当てることができます、

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

参照:参照

于 2013-01-05T16:58:03.527 に答える
1

このように再帰的に作成できます。

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}}}
于 2013-01-05T14:56:15.240 に答える
1

あなたのコードは正しいです。あなたはそれを分類することができます:

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)
于 2013-01-05T15:44:18.900 に答える