2012-10-18 72 views
0

我想轉換下面的代碼來處理超過3個foreach級別。轉換嵌套的foreach循環與3級重複與n級

internal static void CreateLevel(LevelObject levelObject) 
{ 
    foreach(LevelObject l1 in levelObject.LevelObjects) 
    { 
     foreach(LevelObject l2 in l1.LevelObjects) 
     { 
     foreach(LevelObject l3 in l2.LevelObjects) 
     { 
      AddEntities(l3); 
     } 
     AddEntities(l2); 
     } 
     AddEntities(l1); 
    } 
} 

每個LevelObject都有一個子級對象集合,一個實體集合和一個父級對象集合。 我需要這個將對象結構轉換爲過濾器。 任何人有一個想法如何轉換?

+0

你嘗試遞歸算法? – Otiel

+1

添加幾個嵌套'foreach's :) – erikkallen

回答

8

最簡單的方法是遞歸的:

internal static void CreateLevel(LevelObject levelObject) { 
    foreach (var l in levelObject.LevelObjects) { 
     CreateLevel(l); 
     AddEntities(l); 
    } 
} 
+0

好吧,但沒有限制的情況下,這可能會出錯。取決於拋出什麼數據。可能會更好地包含一個級別,以便我們可以在深度n停止遞歸n – spender

+0

但是他可能想更改他的代碼,因爲他想要超過3個級別。 – erikkallen

+0

看到並修正爲'n',但沒有進一步考慮邊界情況,這*可能* stackoverflow。如果圖形是循環的,它**會**。 – spender

0

使用你的代碼...

internal static void CreateLevel(LevelObject levelObject) 
{ 
    foreach(LevelObject l1 in levelObject.LevelObjects) 
    { 
     CreateLevel(l1.LevelObjects); 
     AddEntities(l1); 
    } 
} 

將完成同樣的目標