12

任意の量の配列を指定できる関数を作成しようとしています。戻り値は、指定されたすべての配列の内容を含む配列になります。

私はこれを行いましたが、それは本当に遅くて醜い方法のようです:

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));

これを達成するための組み込みのより効率的で優れた方法はありますか? 結果は入力と同じ順序である必要はありません - 完全にソートされていなくても問題ありません。

4

3 に答える 3

24

concatを使用できます。

パラメータで配列を指定すると、その配列の要素が連結されます。

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);

2 次元配列から 1 つの配列を作成するには、次の関数を使用できます。

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);

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);
于 2011-09-26T06:34:19.207 に答える
8

この方法がループを使用するよりも速いかどうかはわかりませんが、2 つの配列をマージする (派手な) 手っ取り早い方法です。(そしてそれは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
于 2011-09-26T14:55:59.410 に答える
2
function merge(...multi):Array
{
  var res:Array = [];

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

  return res;
}

試してみませんでしたが、このようなものが役立ちます。

于 2011-09-26T07:16:19.597 に答える