在Lua中,我有對象,其中一個對象可以有多個孩子之間的關係的樹結構,但只有一個父對象,即和Lua遞歸搜索對象
OBJ --- OBJ1 --- obj2的--- objd3 --- obj4 --- obj5 --- obj6
如果我想知道obj6的'遠處'父母而不是直接父親obj5,我該如何實現這一點?我只需要一個父級列表,當前對象的兩個或多個級別,我正在使用的API只有一個obj.parent屬性。
僞代碼也將有助於讓我走向正確的方向。
在Lua中,我有對象,其中一個對象可以有多個孩子之間的關係的樹結構,但只有一個父對象,即和Lua遞歸搜索對象
OBJ --- OBJ1 --- obj2的--- objd3 --- obj4 --- obj5 --- obj6
如果我想知道obj6的'遠處'父母而不是直接父親obj5,我該如何實現這一點?我只需要一個父級列表,當前對象的兩個或多個級別,我正在使用的API只有一個obj.parent屬性。
僞代碼也將有助於讓我走向正確的方向。
那麼,如果你的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
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)
你嘗試過什麼?你似乎知道你必須做一個遞歸搜索,所以,這樣做。 –