在 Lua 中,我在对象之间有一个树关系结构,其中一个对象可以有多个子对象,但只有一个父对象,即
obj---obj1---obj2---objd3---obj4---obj5---obj6
如果我想知道 obj6 的“远方”父母,而不仅仅是直接父母 obj5,我该如何实现呢?我只需要比当前对象高两个或更多级别的父级列表,而我正在使用的 API 只有一个 obj.parent 属性。
伪代码也有助于让我朝着正确的方向前进。
在 Lua 中,我在对象之间有一个树关系结构,其中一个对象可以有多个子对象,但只有一个父对象,即
obj---obj1---obj2---objd3---obj4---obj5---obj6
如果我想知道 obj6 的“远方”父母,而不仅仅是直接父母 obj5,我该如何实现呢?我只需要比当前对象高两个或更多级别的父级列表,而我正在使用的 API 只有一个 obj.parent 属性。
伪代码也有助于让我朝着正确的方向前进。
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)
好吧,如果您的 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