7

残念ながら、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クラスは、どのような種類のインターフェイスも実装していません。私が知る限り、配列に変換するジェネリック関数を作成することはできません。ベクトルを配列に変換するたびにこの混乱を追加せずにこれを行う方法はありますか?

4

2 に答える 2

7

簡単で迅速な方法はありません。最善の解決策は、次のようなユーティリティクラスを使用することです。

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);
于 2011-03-09T17:30:21.963 に答える
3

Paul at Workは、それを行うためのより良い方法を見つけました。

var newArray:Array = [].concat(myVector);
于 2012-12-26T15:49:43.910 に答える