2016-06-08 110 views
0

我有如下嵌套結構:將嵌套結構轉換爲平面?

 arr[3].title="a3";   
     arr[3].nextArr=[]; 
     arr[2].title="a2"; 
     arr[2].nextArr=arr[3]; 
     arr[1].title="a1"; 
     arr[1].nextArr=arr[2]; 
     arr[0].title="a0"; 
     arr[0].nextArr=arr[1]; 

喜歡這裏!:

|_ 
    |_ 
    |_ 

正如你看到的,我已經叫一個陣列ARR有四個成員。

如何從arr創建四個分離的數組?

arrayOne=[{title:"a1"},{nextArr:[]}];  
arraytwo=[{title:"a2"},{nextArr:[]}]; 
. 
. 
. 

更新:我需要在我的AngularJS controller.js中進行轉換。我從包含上述數組的服務器收到響應。我必須把它弄平。內部數組的數量不是恆定的。我沒有提到,因爲我不知道算法。但是,根據答案,如果我更詳細地解釋它似乎更好。

Result = {arr[title:"a0",nextArr:{title:"a1",nextArr:{title:"a2",nextArr:{......}}}]}; 
+0

'arrayOne = ARR [1]; arraytwo = arr [2];' – Logman

+2

它看起來像一個''a0「 - >」a1「 - >」a2「 - > []'單鏈表。但是'nextArray'字段的類型是什麼?它如何指向'[]'和兩個字段'title,nextArray'的結構?如果它是一個列表,列表遍歷算法將起作用。 –

+0

所有的數組都有類似的類型。最後一個數組是一個空數組。我更新了這個問題。 – Elnaz

回答

0

可以使用yield創建遞歸遍歷層級的枚舉:

public IEnumerable<{class}> Flatten({class}[] data) 
{ 
    foreach({class} parent in data) 
    { 
     yield return parent; 

     foreach({class} child in flatten(parent.nextArr)) 
      yield return child; 
    } 
} 
+0

您是否需要遍歷'data'數組中的對象才能工作。 – juharr

+0

@juharr謝謝,修復。 –

+0

這是回答這個問題嗎?一旦你有了這個方法,你能展示如何得到OP說他想要的結果嗎? – StriplingWarrior