2012-08-02 53 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