Самый эффективный способ объединения векторов - PullRequest
0 голосов
/ 21 сентября 2010

Какой самый эффективный способ вставить один вектор в другой в определенной позиции?

Например:

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].

Ответы [ 2 ]

1 голос
/ 21 сентября 2010

На данный момент нет встроенной функции, кроме выполнения цикла над 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);
0 голосов
/ 21 сентября 2010

Если вам нужно выполнить конкататацию один за другой, как отметил ПатрикС, bb.concat выполнит эту работу.

Если вам нужно вставить значения посередине, вам понадобится что-то вроде

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

или, что более элегантно, это, если вы не можете изменить

var insertingIndex : int = 2;
for each ( var i : int in aa )
{
    bb.splice( insertingIndex, 0, i );
    insertingIndex++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...