6

値の配列でベクトルを初期化するにはどうすればよいですか?

これを試してみましたが、正常に準拠していますが、機能しません。

 langs = new Vector.<String>(["en","fr"]);

また、次のように、任意の配列をベクトルにロードする必要があります。

 langlist = ["en","fr"];
 langs = new Vector.<String>(langlist);

これを行う方法はありますか?


編集:値の2D配列で2Dベクトルを初期化するにはどうすればよいですか?

 numbers = [[10,20,30], [10,20,30]];
 nums = Vector.<Vector.<Number>>(numbers);

私はこれを試しましたが、エラーが発生します:

TypeError:エラー#1034:型強制が失敗しました

4

4 に答える 4

49

文字列のベクトルを初期化するための適切な構文は次のとおりです。

var langs:Vector.<String> = new <String>[ "en","fr" ];

多次元ベクトルを作成するには、次の構文を使用します。

var v:Vector.<Vector.<int>> = new <Vector.<int>>[ new <int>[ 1, 2, 3 ], new <int>[ 4, 5, 6 ] ];

次の構文は機能しますが、最初に配列を生成してからベクトルにキャストするため、あまり望ましくないことに注意してください。これは低速で、非常に大きな配列で問題があり、多次元ベクトルをサポートしていません。

var langs:Vector.<String> = Vector.<String>( [ "en","fr" ] );
于 2011-06-07T14:05:05.147 に答える
4

グローバル関数Vector.<T>を使用して、配列からaを初期化できます。Vector.<T>

var vec : Vector.<String> = Vector.<String>(["en","fr"]);
于 2010-11-13T18:21:24.397 に答える
3

配列の配列をVectorに渡すことができるとは思いません。

Vector.<Vector.<Number>>

型強制は、複合型では機能しません。すでに2Dアレイをお持ちの場合は、次の変換コードを検討してください。

var numbers:Array = [[1, 2, 3], [4, 5, 6]];
var numbersTemp:Array =
numbers.map(
    function (element:*, index:int, arr:Array):Vector.<Number> {
    return Vector.<Number>(element);
});
var nums:Vector.<Vector.<Number>> = Vector.<Vector.<Number>>(numbersTemp);

もちろん、これによりすべての新しいコピーが2回作成されるため、大きなリストを変換しないのが理想的です。

于 2010-11-14T08:47:12.917 に答える
2

値のリストからVectorを初期化するための最もクリーンで、最速で、最もタイプセーフな方法は次のとおりです。

langs = new <String> ["en","fr"];

新しいVectorを初期化するための一時配列を作成しないため、最速のバイトコードが生成され、ガベージコレクターが無駄な一時配列のインスタンス化に煩わされることはありません。それは同じくらい速いですが、より実用的です:

langs = new Vector.<String>(2);
langs[0] = "en";
langs[1] = "fr";

最も重要なことは、コンパイル時に型チェックを実行し、実行時エラーが発生する可能性を減らすことです。

2Dベクトルの場合、直接の構文はないため、各ベクトルを明示的に作成する必要があります。

nums = new <Vector.<Number> > [new <Number>[10,20,30], new <Number>[10,20,30]];

空でないVector初期化のパフォーマンスと、他のソリューションが遅い理由に関する詳細情報をここで入手できます。

http://jacksondunstan.com/articles/702

PS:古いmxmlcコンパイラは、スペースで区切られていない場合、閉じ括弧を理解しません。

new <Vector.<Number>>

于 2014-06-25T16:35:18.397 に答える