私は一日中これに頭を悩ませてきました。新しい目の時間。
祖先の宝石を使用したツリー構造のモデルがあります。うまく機能し、呼び出すTreeNode.arrange
と、ネストされたツリーであるきちんとした小さなハッシュが返されます。問題は、より良い説明がないために「平坦化されたツリー」を探していることです。例えば:
Node1
Node2
Node3
Node4
Node5
Node6
Node7
Node8
Node9
より伝統的なものとは対照的に
Node1
Node2
Node3...
つまり、分岐点 (複数の子) がある場合にのみ、ツリーを「インデント」したいということです。これを行う最良の方法は再帰関数であると考えました。いくつかのバリエーションを試しましたが、これには空白を描いています:-\
def walk_until_fork(tree_hash,&blk)
tree_hash.each do |node,children|
yield node.title
if children.keys.length > 1
#fork point
children.each do |subnode,grandchilden|
walk_until_fork(grandchilden,&blk)
yield subnode.title
end
else
walk_until_fork(children,&blk)
end
end
end
そのテスト コードを呼び出した結果、フォーク ポイントが出力の一番下になります :-\
私が本当に見たいのはそのようなハッシュ構造ですが、子を持つべき唯一のキーは分岐が発生した場所です (1 つの分岐はその現在のレベルで継続し、その後の各 n 分岐は分岐します)。
私がはっきり言っているかどうかはわかりません。必要に応じて質問で明確にします。