在多级树结构中循环父母

时间:2014-05-05 09:07:52

标签: ruby loops tree

我有一个多级树结构,并且我试图为一个可以拥有1-3个祖先的对象返回一个祖先数组。我有一个工作方法,但它很复杂,我宁愿使用循环,任何人都知道如何使用ruby?

def ancestors
  @a = []
  @a.push(parent) if parent.present?
  @a.push(@a.last.parent) if @a.last.parent.present?
  @a.push(@a.last.parent) if @a.last.parent.present?
  return @a
end

3 个答案:

答案 0 :(得分:2)

假设我理解你的课程正确..我在想这样的事情

def ancestors
   (parent.present? ? [parent, parent.ancestors] :[]).flatten
end

如果Parent存在,则返回由父级及其祖先组成的数组。 flatten是必需的,因为每个级别都添加了一个数组层。

非主题。 return被认为是ruby中的错误样式,除非您需要它,否则此列表不需要是成员变量。

答案 1 :(得分:1)

这是递归的工作。 你需要创建一个自己调用的函数。 像这样......

def ancestors 
  if self.parent.present?
    ancestors << self.parent.ancestors
  else
    return self
  end
end

答案 2 :(得分:1)

使用迭代执行此操作相当简单,您可以尝试

def ancestors
  @a = []
  anc=parent
  while anc.present? do
    @a.push anc
    anc=anc.parent
  end
  return @a
end

(没试过,因为我没有你的数据结构)