我整天都在反对这个。是时候换眼了。
我有一个使用祖先 gem 的树结构模型。效果很好,调用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
调用该测试代码的结果是分叉点最终位于输出的底部:-\
我真正想看到的是这样的散列结构,但唯一应该有孩子的键是发生分支的地方(一个分支在当前级别继续,并且在该分支之后的每个 n 分支)。
我不确定我是否清楚。如果需要,我会澄清任何问题。