如何在动作3中生成动态链接列表

如何在动作3中生成动态链接列表

问题描述:

我坐在一个问题上。我正在学习链表(因为我晚些时候需要这个树解决方案),并尝试动态创建链接。显然我有问题来产生对象之间的联系。如何在动作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

实际的问题是您为节点列表创建变量。然后尝试使用这些名称访问对象。相反,只需像这样在阵列中创建它们(代码未经测试)

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

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上搜索来了解更多信息。