Преобразовать вектор. <SomeType>в массив? - PullRequest
7 голосов
/ 09 марта 2011

К сожалению, в Actionscript кажется, что поддержка класса Vector еще не полностью реализована. В некоторых сценариях мне нужно преобразовать вектор в массив (например, создать коллекцию ArrayCollection). Я подумал , что сработает:

var myVector:Vector.<MyType> = new Vector.<MyType>();

var newArray:Array = new Array(myVector);

Очевидно, это просто создает массив, в котором первый индекс массива содержит полный объект Vector. Это мой единственный вариант:

var newArray:Array = new Array(myVector);

for each(var item:MyType in myVector)
{
    newArray.push(item); 
}

Я чувствую, что это сильно загромождает код, и мне нужно делать это во многих местах. Класс Vector не реализует какой-либо интерфейс, поэтому, насколько я могу судить, я не могу создать универсальную функцию для преобразования в массив. Есть ли способ сделать это, не добавляя этот беспорядок каждый раз, когда я хочу преобразовать вектор в массив?

Ответы [ 2 ]

7 голосов
/ 09 марта 2011

Нет простого / быстрого способа сделать это, лучшее решение - использовать такой служебный класс:

package {

    public class VectorUtil {

        public static function toArray(obj:Object):Array {
            if (!obj) {
                return [];
            } else if (obj is Array) {
                return obj as Array;
            } else if (obj is Vector.<*>) {
                var array:Array = new Array(obj.length);
                for (var i:int = 0; i < obj.length; i++) {
                    array[i] = obj[i];
                }
                return array;
            } else {
                return [obj];
            }
        } 
    } 
}

Тогда вам просто нужно обновить код примерно так:

var myArray:Array = VectorUtil.toArray(myVector);
3 голосов
/ 26 декабря 2012

Пол на работе нашел лучший способ сделать это.

var newArray:Array = [].concat(myVector);
...