2016-09-28 88 views
0

我坐在一個問題上。我正在學習鏈表(因爲我晚些時候需要這個樹解決方案),並嘗試動態創建鏈接。顯然我有問題來產生對象之間的聯繫。如何在動作3中生成動態鏈接列表

這裏是代碼

public function Main() 
    { 
     var node1:Object = {value: 1}; 
     var node2:Object = {value: "foo"}; 
     var node3:Object = {value: "bar"}; 
     var node4:Object = {value: "test"}; 


     for (var a:int = 1; a < 4 ; a++) 
     { 
      if (a < 3) 
      { 
      node[a].next = node[a + 1]; 
      } 
      else 
      { 
       node[a].next = null; 
      } 

     } 
     // ((node1.next = node2).next = node3).next = null; works, but 
     // not the code above 


     var n:Object = node1; 
     while (n) 
     { 
      trace(n.value); 
      var jsonString:String = JSON.stringify(n); 
      trace(jsonString); 

      n = n.next; 
     } 
    } 

我能有一個解釋嗎?

我知道對象不是一個數組,但應該可以將指針指向正確的位置。我很確定,這可能是一個動態的解決方案。我真的嘗試了不同的符號。你有提示嗎?

+0

如果'a'爲'1',則可以將'node1'作爲'this ['node'+ a]'來訪問。不過,我不明白你在嘗試實現 – www0z0k

+0

它是我做鏈接列表的第一步。對我來說這是研發 – Glowhollow

回答

1

實際的問題是您爲節點列表創建變量。然後嘗試使用這些名稱訪問對象。相反,只需像這樣在陣列中創建它們(代碼未經測試)

public function Main() 
{ 
    var nodes:Array = [{value: 1}, {value: "foo"}, {value: "bar"}, {value: "test"}]; 

    for each(var a:int = 0; a < nodes.length - 1 ; a++) 
    { 
     nodes[a].next = nodes[a + 1]; 
    } 

    var n:Object = nodes[0]; 
    while (n) 
    { 
     trace(n.value); 
     var jsonString:String = JSON.stringify(n); 
     trace(jsonString); 
     n = n.next; 
    } 
} 

您目前的解決方案由於多種原因而不好。這不是很靈活。如果你想添加一個節點到列表中,你必須創建一個具有合適名稱的新變量(否則它將不會被循環拾取)。你還必須修改循環中硬編碼的上限。在您的代碼中冗餘地使用相同的信息是一種維護噩夢。 這裏是另一個:如果你想刪除node2怎麼辦?是的,你必須重命名所有以下變量。

您對動態解決方案使用循環的想法很好。然而,你創建數據的方式是這個目標的障礙。 儘量避免在程序中使用變量名稱作爲值。

+0

非常感謝您的評論。我想告訴你,這只是我的考驗。該項目的自我將處於起步階段。我通常使用數組並嘗試聯繫鏈接列表。此外,我想建立一個動態樹。但我必須瞭解這一點,不僅僅是複製和粘貼。這是學習困難的方式:)。 P.S.我也嘗試與對象取得聯繫... – Glowhollow

0
for (var a:int = 1; a < 4 ; a++) 
    { 
     if (a < 3) 
     { 
     this["node"+ String(a)].next = this["node"+ String(a+1)]; 
     } 
     else 
     { 
      this["node"+ String(a)].next = null; 
     } 

    } 

我用括號語法到(由字串)動態地訪問屬性。您可以通過在Internet上搜索來了解更多信息。