使用Lua对象进行递归搜索

时间:2012-06-21 19:24:19

标签: recursion lua pseudocode

在Lua中,我在对象之间有一个树关系结构,其中一个对象可以有多个子对象,但只有一个父对象,即

物镜OBJ1 --- --- --- OBJ2 --- objd3 --- OBJ4 --- obj5 obj6

如果我想知道obj6的'遥远'父母而不仅仅是直接的父母obj5,我怎么能实现呢?我只需要一个比当前对象高两级或更多级别的父级列表,而我正在使用的API只有一个obj.parent属性。

伪代码也有助于让我朝着正确的方向前进。

2 个答案:

答案 0 :(得分:3)

obj.parent               -- immediate parent (obj5)
obj.parent.parent        -- parent's parent (obj4)
obj.parent.parent.parent -- parent's parent's parent (obj3)

等等等等?

如果您想避免尝试引用不存在的父级,我认为您可以执行以下操作:

function getAncestor(obj, depth)
   if not obj.parent then
      return nil
   elseif depth > 1 then
      return getAncestor(obj.parent, depth-1)
   end
   return obj.parent
end


-- get parent
obj = getAncestor(obj6)

-- get great great grandparent
obj = getAncestor(obj6, 3)

答案 1 :(得分:2)

好吧,如果您的api支持.parent,您是否可以执行以下操作?我和Lua生气了,但这应该是一个开始。

local function GetAncestors(child)

    local ancestors = {};

    if child.parent then
        local i = 0;
        ancestors[0] = child.parent;
        while ancestors[i].parent do
            ancestors[i + 1] = ancestors[i].parent;
            i = i + 1;
        end
    end

    return ancestors;

end