2012-06-21 74 views
2

在Lua中,我有對象,其中一個對象可以有多個孩子之間的關係的樹結構,但只有一個父對象,即和Lua遞歸搜索對象

OBJ --- OBJ1 --- obj2的--- objd3 --- obj4 --- obj5 --- obj6

如果我想知道obj6的'遠處'父母而不是直接父親obj5,我該如何實現這一點?我只需要一個父級列表,當前對象的兩個或多個級別,我正在使用的API只有一個obj.parent屬性。

僞代碼也將有助於讓我走向正確的方向。

+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 
+0

非常感謝這正是我想要做的。 :) – aethys

+0

順便說一句,這應該讓你所需的'父母名單',從中你可以排除任何一代你想要的。就像我說的,如果我在這裏有一些邏輯/語法問題,請告訴我。 – canon

+0

沒有評論的投票是不好的味道imo。 – canon

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)