2010-09-21 23 views
0

在特定位置插入一個矢量到另一個矢量的最有效方法是什麼?最有效的方法來連接矢量

例如:

var aa:Vector.<int> = Vector.<int>([1, 2, 3]); 
var bb:Vector.<int> = Vector.<int>([9, 8, 7]); 

這並不似乎工作:

bb.splice(1, 0, aa); 

結果是[9,0,8,7]。

回答

0

如果您需要一個接一個地連接,就像PatrickS提到bb.concat將完成這項工作。

如果您需要在中間插入值,你需要像

for each (var i : int in aa.reverse()) 
{ 
    bb.splice(1,0,i); 
} 

,或者更優雅,這一點,如果你不能改變AA

var insertingIndex : int = 2; 
for each (var i : int in aa) 
{ 
    bb.splice(insertingIndex, 0, i); 
    insertingIndex++; 
} 
+0

對於這個循環什麼是變量「我」? – zinovii 2010-09-21 10:52:27

+0

2個例子都沒有工作,兩個例子都沒有效率。我仍然希望找到更有效的方法,然後循環和拼接。 – zinovii 2010-09-21 10:54:17

+0

小心定義「不工作」和「高效」? :) – 2010-09-21 14:22:54

1

眼下有除了在Vector上做循環之外沒有內建函數,這裏有兩種方法(我沒有對它們進行計時)。

如果BB可以是一個新的Vector比如,你可以這樣做:

var insertIndex:int = 1; 
bb=bb.slice(0, insertIndex).concat(aa).concat(bb.slice(insertIndex)); 

如果BB不能改變,你可以做一個splice但準備的元素插入到一個新的Array

var insertIndex:int = 1; 

var parms:Array=[insertIndex, 0]; // prepare the arguments for the splice call 
var j:int = 2; // length of the parms array 

var len:int = aa.length; 

for (var i:int = 0; i < len; i++, j++){ 
    parms[j] = aa[i]; 
} 

// call the splice with the new arguments 
bb.splice.apply(bb, parms); 
+1

我認爲concat在引擎蓋後面做了一個循環,所以這兩個解決方案應該大致相當。 – 2010-09-21 10:52:28

+0

看起來像slice.concat.concat是目前爲止效率最高的。 – zinovii 2010-09-21 10:59:22

相關問題