私は、ネストされたハッシュによってインスタンス化することができるツリーデータ構造を作成しようとしています。Rubyは私のハッシュを配列に変換しますか?
私のコードは以下の通りであり、ノードをキーから再帰的に抜き出し、その値から子を抜き出すだけです。
class Tree
attr_accessor :children, :node_name
#def initialize(name, children=[])
# @children = children
# @node_name = name
# end
def initialize(hashTree)
@node_name = hashTree.keys[0]
@children = []
p node_name
hashTree[node_name].each do |hash|
children << Tree.new(hash)
end
end
#...
end
p = {'grandpa' => { 'dad' => {'child 1' => {}, 'child2' => {} }, 'uncle' => {'child 3' => {}, 'child 4' => {} } } }
p p
p Tree.new(p)
私はそのコードを実行しようとすると、私は、次を得る:
{"grandpa"=>{"dad"=>{"child 1"=>{}, "child2"=>{}}, "uncle"=>{"child 3"=>{}, "child 4"=>{}}}}
"grandpa"
/Users/Matt/sw/sevenLang/week1/hw-tree.rb:8:in `initialize': undefined method `keys' for ["dad", {"child 1"=>{}, "child2"=>{}}]:Array (NoMethodError)
from /Users/Matt/sw/sevenLang/week1/hw-tree.rb:12:in `new'
from /Users/Matt/sw/sevenLang/week1/hw-tree.rb:12:in `block in initialize'
from /Users/Matt/sw/sevenLang/week1/hw-tree.rb:11:in `each'
from /Users/Matt/sw/sevenLang/week1/hw-tree.rb:11:in `initialize'
from /Users/Matt/sw/sevenLang/week1/hw-tree.rb:26:in `new'
from /Users/Matt/sw/sevenLang/week1/hw-tree.rb:26:in `<main>'
[Finished in 0.1s with exit code 1]
各キーが最初の要素である配列、および値にネストされたハッシュを回しているように見えます2番目の要素です。
'hashTree'はハッシュですので、' hashTree.each do | hash | 'の' hash'もハッシュ – Jones