我有一个多级树结构,并且我试图为一个可以拥有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
答案 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
(没试过,因为我没有你的数据结构)