2012-08-02 49 views
0

这可能是一个简单的,如果是这样,我相信我会觉得愚蠢。AS3:动态引用不同的数组?

基本上,我有数组a1,a2和a3。

使用for语句..

for (var i 0; i < 4; i++) { 
//stuff 
} 

我如何可以把数据在for语句中使用到这些我阵列中的一个?也就是说,每次将数据添加到下一个组中。 a [0] - > a [1]等。我尝试了getDefinitionByName,但它似乎只适用于库对象!

对不起,如果很简单!

提前欢呼。

编辑:

完整的代码,我需要这个工作。这是我尝试使用我给出的第一个答案。

var fullList:Vector.<Array> = new Vector.<Array>(); 

for (var i1 = 0; i1 < 3; i1++) 
{ 
    fullList.push(new Array()); 
} 

var levelLoader:URLLoader = new URLLoader(); 
levelLoader.addEventListener(Event.COMPLETE, levelLoaded); 
function levelLoaded(e:Event):void 
{ 
    var indexcount = 0; 
    txttileArray = e.target.data.split("a"); 
    txtDebug.text = txttileArray.toString(); 
    for (var i = 1; i < 4; i++) 
    { 
     temparray1 = txttileArray[indexcount].split(""); 
     for (var row = 0; row < temparray1.length; row ++) 
     { 
      var a = getDefinitionByName(temparray1[row] + "Tile") as Class; 
      //trace(a); 
      var b = new a ; 
      b.x = 17 + 17 * row; 
      b.y = 17 + 17 * indexcount; 
      addChild(b); 
      fullList[indexcount].push(b); 
     } 
     indexcount++; 
    } 
} 

对于凌乱的变量名称感到抱歉。

+0

你的问题是混淆了我一下。你想知道如何动态访问每个单独的数组,或者你想知道如何将i作为索引传递给数组? – puggsoy 2012-08-02 10:02:47

+0

我想知道如何动态访问每个单独的数组。 – hazdog 2012-08-02 10:06:12

+0

还是不明白你想要什么。你介意以一种真正可以理解的方式准确解释你想要做什么? – 2012-08-02 10:45:15

回答

0

我有三个阵列中,a1,a2和a3。我想基于变量“i”的值访问这些数组。例如,如果“i” 是1,我想将数据值推送到a1。等等 - hazdog

如果你有数组a1,a2和a3作为局部变量(在函数中定义),这是不可能的。如果他们在类中定义,那么这里是你如何做到这一点:

private var a1:Array=[]; 
private var a2:Array=[]; 
private var a3:Array=[]; 

private function pushValue(identifier:String, value:Object):int { 
    var name:String="a" + identifier; 
    var target:Array=this[name] as Array; 
    if(target == null) { 
     throw new Error("No such array " + name); 
    } else { 
     return target.push(value); 
    } 
} 

//And then call it like this: 
pushValue("1", "This value goes in array a1"); 
pushValue("1", "This is another value that goes in array a1"); 

pushValue("2", "This value goes in array a1"); 
pushValue("2", "This is another value that goes in array a2"); 

pushValue("3", "This value goes in array a3"); 
pushValue("3", "This is another value that goes in array a3"); 

否则,你可以定义数组的数组(或阵列的矢量),说在你把你的目标阵列holderArray,然后的值推送到holderArray[identifier]

EDIT 代替在this对象限定a1a2a3,定义这样的:

private var arrayHolder:Object={}; 

private function init():void { 
    for(var i:int=1; i<=3; i++) { 
     arrayHolder["a" + i]=new Array(); 
    } 
} 

init(); 

那么,你的阵列将被存储为arrayHolder.a1arrayHolder.a2arrayHolder.a3等 并修改pushValue如下:
变化

var target:Array=this[name] as Array; 

var target:Array=arrayHolder[name] as Array; 
+0

的底部,与其他人发布的解决方案一样,这样做会导致我的数组为空。没有错误抛出,仅仅是阵列空白 – hazdog 2012-08-02 11:31:15

+0

只能在你重新初始化阵列时才会发生。检查一下。 – 2012-08-02 12:12:19

+0

只是稍微改变了我的代码..现在它说“没有这样的数组a1”..但我的程序的第三行将a1初始化为一个新的数组。 GAH! – hazdog 2012-08-02 12:37:27

0

成立。您需要使用数组中的数组。

private var fullList:Vector.<Array>; 
private var total:uint = 4; 

function a():void 
{ 
    // first creating array list 
    fullList = new Vector.<Array>(); 

    for (var i:uint = 0; i < total; i++) 
    { 
     fullList.push(new Array()); 
    } 
} 

function b():void 
{ 
    // doing the stuff 

    for (var i:uint = 0; i < total; i++) 
    { 
     switch (i) 
     { 
      case 0: 

       fullList[i].push('zero-array-push'); 
       break; 

      case 1: 

       fullList[i].push('one-array-push'); 
       break; 

      case 2: 

       fullList[i].push('two-array-push'); 
       break; 

      case 3: 

       fullList[i].push('three-array-push'); 
       break; 
     } 
    } 
} 
+0

哇,似乎比我想象的更复杂..我以前没有用过矢量,有没有办法做到这一点?如果没有,我会给这个镜头,并让你知道我怎么去 – hazdog 2012-08-02 10:08:44

+0

基本矢量是相同的数组,只是你可以定义哪种类型的对象将在里面。自动完成功能更快更好。 – 2012-08-02 10:10:49

+0

我明白了。问题是我已经在使用二维数组来导航一个类似网格的字段..在尝试了一个向量和一个数组数组之后,我似乎无法正确地将数据推送到数组中,这导致了这个运动的错误。我会发布我在我的问题 – hazdog 2012-08-02 10:18:18