简体   繁体   English

AS3合并多个阵列的最快方法

[英]AS3 Fastest way to merge multiple arrays

I'm trying to write a function where I can specify any amount of array, and the return value will be an array containing the contents of all of the specified arrays. 我正在尝试编写一个函数,我可以指定任意数量的数组,返回值将是一个包含所有指定数组内容的数组。

I've done this, but it seems like a really slow and ugly way of doing it: 我已经做到了,但这似乎是一种非常缓慢而丑陋的方式:

var ar1:Array = [1,2,3,4,5,6,7,8,9];
var ar2:Array = ['a','b','c','d','e','f','g','h'];


function merge(...multi):Array
{
    var out:String = "";

    for each(var i:Array in multi)
    {
        out += i.join(',');
    }

    return out.split(',');
}

trace(merge(ar1, ar2));

Is there an inbuilt and more efficient / nice way of achieving this? 是否有内置且更有效/更好的方法来实现这一目标? The result does not need to be in the same order as the input - completely unsorted is fine. 结果不需要与输入的顺序相同 - 完全未排序就好了。

You can use concat . 你可以使用concat

If the parameters specify an array, the elements of that array are concatenated. 如果参数指定数组,则连接该数组的元素。

var ar1:Array = [1,2,3,4,5,6,7,8,9];
var ar2:Array = ['a','b','c','d','e','f','g','h'];
var ar3:Array = ['i','j','k','l'];

var ar4 = ar1.concat(ar2, ar3); // or: ar1.concat(ar2).concat(ar3);

To make a single array out of a 2 dimensional array you can use this function: 要从二维数组中制作单个数组,您可以使用此函数:

private function flatten(arrays:Array):Array {
    var result:Array = [];
    for(var i:int=0;i<arrays.length;i++){
        result = result.concat(arrays[i]);
    }
    return result;
}

// call
var ar4 = [ar1, ar2, ar3];
var ar5 = flatten(ar4);

You can also use varargs to merge multiple arrays: 您还可以使用varargs合并多个数组:

private function merge(...arrays):Array {
    var result:Array = [];
    for(var i:int=0;i<arrays.length;i++){
        result = result.concat(arrays[i]);
    }
    return result;
}

// call
var ar5 = merge(ar1, ar2, ar3);

I don't know if this method is faster than using loops, but it is a (fancy) quick way to merge 2 arrays. 我不知道这种方法是否比使用循环更快,但它是一种(花哨)快速合并2个数组的方法。 (and it works in Javascript and Actionscript) (它适用于Javascript和Actionscript)

var arr1:Array = [1,2,3,4,5]
var arr2:Array = [6,7,8,9,10]

arr1.push.apply(this, arr2); // merge 
// arr1.push.call(this, arr2); // don't use this. see comment below

trace(arr1) // 1,2,3,4,5,6,7,8,9,10
function merge(...multi):Array
{
  var res:Array = [];

  for each(var i:Array in multi)
  {
    res = res.concat(i);
  }

  return res;
}

Didnt try it, but something like this would help you. 没试过,但这样的事情对你有帮助。

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

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