1

我正在尝试编写非常简单的递归方法,但无法使其工作。我有简单的评论层次结构,其 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). 我需要像 global $i 这样的东西来保持这个 arras 索引,但我确信必须有更好的方法来做到这一点。@tree 也是如此,我真的必须向模型添加新变量才能将其用作 recur 方法的返回参数吗?我不会在任何其他地方使用它。

4

1 回答 1

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
于 2012-11-23T12:09:50.450 回答