简体   繁体   English

AS3循环创建多个数组

[英]AS3 create multiple arrays in loop

I'm trying to make six arrays, so I've created them all by hand. 我正在尝试制作六个数组,所以我已经手工创建了它们。 I know there's a way to make this whole kerfuffle shorter, but it's slipping my mind. 我知道有一种方法可以缩短整个混洗时间,但是这让我无所适从。

var variant_1:Array = new Array
                    (rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), 
                     "", "",  "", "",  "", "", "", "", "", "", "", "");

var variant_2:Array = new Array
                    (rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), 
                     "", "",  "", "",  "", "", "", "", "", "", "", "");

var variant_3:Array = new Array
                    (rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), 
                     "", "",  "", "",  "", "", "", "", "", "", "", "");

var variant_4:Array = new Array
                    (rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), 
                     "", "",  "", "",  "", "", "", "", "", "", "", "");

var variant_5:Array = new Array
                    (rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), 
                     "", "",  "", "",  "", "", "", "", "", "", "", "");

var variant_6:Array = new Array
                    (rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), rp.getNum(), 
                     "", "",  "", "",  "", "", "", "", "", "", "", "");

NOTE : getNum() is a function that gives me a random range of numbers between 1 and 90, then I assign them to a dynamically created table. 注意getNum()是一个函数,可为我提供介于1到90之间的随机数字,然后将它们分配给动态创建的表。

NOTE 2 : The empty values in the arrays are empty cells in the table, because in a table of 9x3 I need 15 numbers and 12 empty spaces. 注意2 :数组中的空值是表中的空单元格,因为在9x3的表中,我需要15个数字和12个空位。

NOTE 3 : Yes, it's a bingo game. 注意3 :是的,这是宾果游戏。

Thank you. 谢谢。

You can use a for loop eg. 您可以使用for循环。

for(var i:int=0; i<10; i++) {
  trace(i);       
} 

For what you are trying to do you can wrap it in a function that returns a new array 对于您要尝试执行的操作,可以将其包装在返回新数组的函数中

function createArray(){
   var a = [];//new array

   for(var i:int=0; i<??; i++) {
      //some conditions
      if(i < ??)  {
         //push to array
      }  
      else {
         //push to array
      }  
   } 

  return a;
}


var myNewArray:Array = createArray();

Have a look at http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/loops.html for a good intro to loops. 看看http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/loops.html ,这是一个不错的循环介绍。

var variants = createVariants(6, 15, 12);

// use your variations: // variants[0][0] is the same as your variant_1[0] //使用您的变体:// variants [0] [0]与您的variant_1 [0]相同

function createVariants(numVariants : int, numPrefilled : int, numEmpty : int) : Array{
  var variants : Array = [];
  for(var i : int = 0;i<numVariants;i++){
    var variant : Array = [];
    for(var j : int = 0;j<numPrefilled ;j++){
      variant.push(rp.getNum());
    }
    for(var j : int = 0;j<numEmpty ;j++){
      variant.push("");
    }
    variants.push(variant);
  }
  return variants;
}

Building off Paul's answer, you could also use a 2d array to store each array, with the benefit of being able to use a loop to create as many array variants as you need (cost would be the added complexity of having to maintain a 2d array). 根据Paul的回答,您还可以使用2d数组存储每个数组,其好处是可以使用循环创建所需数量的数组变体(成本将是维护2d数组的额外复杂性)。

Using a 2d array could be like: 使用二维数组可能像:

function createArrayVarient(){
    var result:Array = new Array();
    var counter:int;

    // 15 as there are 15 numbers added first
    for(counter = 0; counter < 15; counter++){
        result.push(rp.getNum());
    }

    // 12 for the number of "" added
    for(counter = 0; counter < 12; counter++){
        result.push("");
    }
    return result;
}

var arrayVarients:Array = new Array();

// 6 as you have 6 array variants in your sample
for(var counter = 0; counter < 6; counter++){
    arrayVarients.push(createArrayVarient());
}

then if you haven't worked with 2d arrays before, to access each array varient inside "arrayVarients", it would go: 然后,如果您之前没有使用过2D数组,则要访问“ arrayVarients”内部的每个数组变量,它将执行以下操作:

arrayVarients[0] // the first array variant
arrayVarients[1] // the second array variant
arrayVarients[2] // the third array variant
...etc

to access each value inside an array variant, it would go (using 2 indexes): 要访问数组变量内的每个值,它将使用(使用2个索引):

arrayVarients[0][0] // the first value in the first variant array
arrayVarients[2][7] // the eight value in the third variant array

I guess this is what you want 我想这就是你想要的

var iVariantCount:int = 6;//number of variants
var arrVariants:Array = new Array();//this will hold your variants array (variant_1,variant_2,etc)
var iVariantLength:int = 27;//total no fo elements in a variant array
var iRandomNumCount:int = 15;//no of random numbers in a variant array

for (var i:int = 0;  i<iVariantCount ; i++) 
{
    var arrVariant:Array = new Array();
    for (var j:int = 0;  j < iVariantCount ; j++) 
    {
        if (i < iRandomNumCount)
        {
            arrVariant.push(rp.getNum());
        }
        else
        {
            arrVariant.push("");
        }
        arrVariants.push(arrVariant);
    }   
}

//Check the result
for (i = 0;  i<arrVariants.length ; i++) 
{
    trace("Variant_" + i + ": " + arrVariants[i]);
}

Try this and tell me if it works for you. 试试这个,告诉我它是否适合您。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM