Существует функция forEach, которую вы можете использовать как в Vector, так и в Array. В основном это вызывает функцию для каждого элемента в векторе. Вот как это работает:
var myVector:Vector.<Foo> = new Vector();
var myArray:Array = [];
myVector.forEach(arrayConverter);
function arrayConverter(element:*, index:int, array:Array):void{
myArray[myArray.length] = element;
}
Но я не смог найти функцию, которая просто перемещает все значения из вектора в массив. Другое решение может состоять в том, что вы создаете класс, который расширяет класс Vector, а затем у вас есть открытая функция toArray (), и затем у вас есть этот код в этой функции, поэтому вам не нужно писать его каждый раз, когда вы хотите преобразовать.
Векторная документация
Редактировать: Нашел этот старый вопрос сегодня и подумал, что было бы интересно провести тестовый тест всех различных методов в это воскресное утро.
Я использовал вектор с 1000000 элементами и сделал 2 теста для каждой петли. Один использует встроенные функции массива push, а другой - обычные операции с массивами.
- Для цикла, не нажимайте: 520 мс
- Для цикла нажмите: 1027 мс
- цикл по каждому элементу, а не push: 1753 мс
- цикл по каждому элементу, нажмите: 2264 мс
- Во время цикла, не нажимайте: 2775 мс
- Во время цикла, не нажимайте: 3282 мс
- Использовать цикл, не нажимать: 4059 мс
- Util loop, нажмите: 4570 мс
А вот эталонный тест с использованием 1000 единиц:
- Для цикла, не нажимайте: 1 мс
- Для цикла нажмите: 2 мс
- цикл по каждому элементу, а не push: 2 мс
- цикл по каждому элементу, нажмите: 3 мс
- Во время цикла, не нажимайте: 3 мс
- Во время цикла, не нажимайте: 4 мс
- Цикл Util, без нажатия: 4 мс
- Util loop, нажмите: 5 мс
В основном, когда вы получаете более 10 000 предметов, вы начинаете видеть реальную разницу. Таким образом, от 0 до 10 000 наименований не имеет значения, какой вы используете.
package
{
public class Loops{
public static function forLoop(vector:Vector.<Foo>, usePush:Boolean = false):Array{
var result:Array = [];
for(var i:int = 0; i < vector.length; i++){
if(usePush){
result.push(vector[i]);
}else{
result[result.length] = vector[i];
}
}
return result;
}
public static function foreachLoop(vector:Vector.<Foo>, usePush:Boolean):Array{
var result:Array = [];
for each(var key:String in vector){
if(usePush){
result.push(vector[key]);
}else{
result[result.length] = vector[key];
}
}
return result;
}
public static function whileLoop(vector:Vector.<Foo>, usePush:Boolean):Array{
var result:Array = [];
var i:int = 0;
while(i < vector.length){
if(usePush){
result.push(vector[i]);
}else{
result[result.length] = vector[i];
}
}
return result;
}
public static function arrayUtilLoop(vector:Vector.<Foo>, usePush:Boolean):Array{
var result:Array = [];
function arrayUtilForeach(element:*, index:int, array:Array):void{
if(usePush){
array.push(element);
}else{
array[result.length] = element;
}
}
vector.forEach(arrayUtilForeach);
return result;
}
}
}
Я использовал функцию getTimer, чтобы выполнить эталонный тест, поэтому он может быть не точным на 100%, но разница между циклами настолько велика, что я не думаю, что это имеет значение.
Надеюсь, кто-то нашел это полезным.