如何在动作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;
}
}
我能有一个解释吗?
我知道对象不是一个数组,但应该可以将指针指向正确的位置。我很确定,这可能是一个动态的解决方案。我真的尝试了不同的符号。你有提示吗?
实际的问题是您为节点列表创建变量。然后尝试使用这些名称访问对象。相反,只需像这样在阵列中创建它们(代码未经测试)
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
怎么办?是的,你必须重命名所有以下变量。
您对动态解决方案使用循环的想法很好。然而,你创建数据的方式是这个目标的障碍。 尽量避免在程序中使用变量名称作为值。
非常感谢您的评论。我想告诉你,这只是我的考验。该项目的自我将处于起步阶段。我通常使用数组并尝试联系链接列表。此外,我想建立一个动态树。但我必须了解这一点,不仅仅是复制和粘贴。这是学习困难的方式:)。 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上搜索来了解更多信息。
如果'a'为'1',则可以将'node1'作为'this ['node'+ a]'来访问。不过,我不明白你在尝试实现 – www0z0k
它是我做链接列表的第一步。对我来说这是研发 – Glowhollow