Performance 在Actionscript中加入阵列的最佳方法

Performance 在Actionscript中加入阵列的最佳方法,performance,actionscript,readability,Performance,Actionscript,Readability,我需要将一个数组添加到另一个数组(只关心保存加入的数组)。这样做的首选方式是什么?速度是首要考虑的问题,其次是可读性(我认为选项1是一个更清洁的选择)。我想这也可能取决于数组的长度,但是有什么好的指导方针吗 备选案文1: var array1:Array = new Array("1","2","3"); var array2:Array = new Array("4","5","6"); // Don't care about array2 after this point. var arr

我需要将一个数组添加到另一个数组(只关心保存加入的数组)。这样做的首选方式是什么?速度是首要考虑的问题,其次是可读性(我认为选项1是一个更清洁的选择)。我想这也可能取决于数组的长度,但是有什么好的指导方针吗

备选案文1:

var array1:Array = new Array("1","2","3");
var array2:Array = new Array("4","5","6");

// Don't care about array2 after this point.
var array1 = array1.concat(array2);
备选案文2:

var array1:Array = new Array("1","2","3");
var array2:Array = new Array("4","5","6");

// Don't care about array2 after this loop has run.
for each(var item:Object in array2)
{
    array1.push(item);
}

我个人会使用
concat
,因为它更简单


它可能也更快(因为它可以本机实现),但如果它对您很重要,请测量它。除非处理大量数组值,否则不太可能有差异,这将是微优化的主要示例。

我个人会使用
concat
,因为它更简单


它可能也更快(因为它可以本机实现),但如果它对您很重要,请测量它。除非处理大量数组值,否则不太可能有差异,这将是微优化的主要示例。

这听起来像是。。。基准

import flash.utils.getTimer;

function addItems($array:Array, $start:int, $count:int) {
    for (var i:Number = $start; i < $start + $count; i++) {
        $array.push(i);
    }
}

function concatArrays($array1:Array, $array2:Array):Number {
    var t1:Number = getTimer();
    $array1.concat($array2);
    var t2:Number = getTimer();
    return t2 - t1;
}

function pushArrays($array1:Array, $array2:Array):Number {
    var t1:Number = getTimer();
    for each (var item:Object in $array2) {
        $array1.push(item);
    }
    var t2:Number = getTimer();
    return t2 - t1;
}

function testBed() {
    for (var i:Number = 10000; i <= 100000; i+=10000) {
        trace("\n---- New test");
        var a1:Array = [];
        var a2:Array = [];
        addItems(a1, 0, i);
        addItems(a2, i, i);
        trace("For " + a1.length + " items: ");
        trace("concatArrays: " + concatArrays(a1, a2));
        trace("pushArrays:   " + pushArrays(a1, a2));
    }
}

testBed();

这些数字是以毫秒为单位的,正如Richard指出的,除非你的数组有大量的元素,或者你非常频繁地连接数组,否则这是一个不值得你花费时间的优化

这听起来像是。。。基准

import flash.utils.getTimer;

function addItems($array:Array, $start:int, $count:int) {
    for (var i:Number = $start; i < $start + $count; i++) {
        $array.push(i);
    }
}

function concatArrays($array1:Array, $array2:Array):Number {
    var t1:Number = getTimer();
    $array1.concat($array2);
    var t2:Number = getTimer();
    return t2 - t1;
}

function pushArrays($array1:Array, $array2:Array):Number {
    var t1:Number = getTimer();
    for each (var item:Object in $array2) {
        $array1.push(item);
    }
    var t2:Number = getTimer();
    return t2 - t1;
}

function testBed() {
    for (var i:Number = 10000; i <= 100000; i+=10000) {
        trace("\n---- New test");
        var a1:Array = [];
        var a2:Array = [];
        addItems(a1, 0, i);
        addItems(a2, i, i);
        trace("For " + a1.length + " items: ");
        trace("concatArrays: " + concatArrays(a1, a2));
        trace("pushArrays:   " + pushArrays(a1, a2));
    }
}

testBed();

这些数字以毫秒为单位,正如Richard指出的,除非您的数组有大量的元素,或者您非常频繁地连接数组,否则这是一个不值得您花费时间的优化

感谢您花时间将其组合在一起!我知道微优化是毫无意义的,但当我不知道这样一个问题的答案时,我还是会感到困扰,哈哈。谢谢你花时间把这些放在一起!我知道微优化是毫无意义的,但当我不知道这样一个问题的答案时,我还是会感到困扰,哈哈。