我正在尝试编写非常简单的递归方法,但无法使其工作。 我有简单的评论层次结构,其中包含ID:
1--
2--
4--
3--
5--
现在我想将它们的ID保存在数组(树顺序)[0]=1, [1]=2, [2]=4, [3]=3, [4]=5
我开始使用
在Entry模型中构建此数组def comment_tree
comment = self.comments.find(1) #it's temporary, just to check if it works
return recur(comment,0)
end
private
def recur(comment,i)
@tree[i]=comment.id #added attr_accessible :@tree
if comment.children.any?
comment.children.each {|c| recur(c,i+1)}
else
return
end
@tree
end
这不起作用,因为块运行两次相同的计数器参数recur(4,2)
和recur(3,2)
。我需要类似全局$ i的东西来保持这个arras索引,但我确信必须有更好的方法来做到这一点。与@tree相同,我是否真的必须将新变量添加到模型中才能将其用作recur方法的返回参数?我不会在任何其他地方使用它。
答案 0 :(得分:2)
这个怎么样:
def comment_tree
comment = self.comments.find(1)
tree = []
recur(comment, tree)
tree
end
private
def recur(comment, acc)
acc << comment.id
comment.children.each {|c| recur(c, acc) }
end