Adobe Flash非公式テクニカルノート エレメントをもったVectorインスタンスの生成
Flash Player 10から備わったVectorクラスは、予め定めた同じデータ型の値を連番インデックスのエレメントに収めます。いわば最適化されたArrayクラスといえます。ただし、Arrayクラスと異なり、Vector()コンストラクタメソッドに引数としてエレメントの初期値を渡すことはできません。そこで、Vectorインスタンスに初期値のエレメントを加える手法についてご説明します。 01 Vector()関数で配列を変換する var Vectorインスタンス:Vector.<ベース型> = Vector.<ベース型>(Arrayインスタンス); Vector()関数は、引数に渡された配列のエレメントひとつひとつをベース型に変換します。 var myVector:Vector.<int> = Vector.<int>([0.9, true, "2", [3]]); もっとも、Vectorクラスを使うときは、エレメントのデータ型(ベース型)は正しく揃えるのが普通です。その場合、いちいちデータを変換する必要はないのに、余計な処理(時間)が増えることになります。 02 Vector.push()メソッドでエレメントを加える var Vectorインスタンス:Vector.<ベース型> = new Vector.<ベース型>(); エレメントはひとつひとつ加えると、インデックスと値がわかりやすくなります。 var myVector:Vector.<int> = new Vector.<int>(); Vector.push()メソッドの引数には、複数の値をエレメントとして渡すこともできます。値を納める処理としては、こちらの方が速いようです。 var myVector:Vector.<int> = new Vector.<int>(); 03 配列アクセス演算子でエレメントを加える var Vectorインスタンス:Vector.<ベース型> = new Vector.<ベース型>(); Vector.push()メソッドと比べて、インデックスが明らかにできます(逆に、Vector.push()メソッドは、連番を気にしなくて済みます)。また、処理も少し速くなります。 var myVector:Vector.<int> = new Vector.<int>(); 加えるエレメント数が予め決まっているときは、コンストラクタに第1引数としてその数を渡した方が処理は速いです。 var myVector:Vector.<int> = new Vector.<int>(4); // 長さを指定 04 新しいnewシンタックスを使う var Vectorインスタンス:Vector.<ベース型> = new <ベース型>[エレメント0, エレメント1, …, エレメントN]; プリミティブ値などの単純な値をエレメントに加える場合には、手っとり早くてしかも見やすい書き方といえます。内部的には、長さを定めたインスタンスに配列アクセス演算子で値を納める処理と、基本的に変わらないようです[*2]。処理の速さもほとんど差がありません。 var myVector:Vector.<int> = new <int>[0, 1, 2, 3];
05 それぞれの手法の速さについて ただ、配列アクセス演算子によりインデックスに値を納める場合は、インスタンス生成時にその長さを定めておくべきでしょう。また、単純な値をまとめて加えるとき、Flash Professional CS5からは新しいnewシンタックスが見やすく、また処理も速いといえます[*3]。
作成者: 野中文雄 Copyright © 2001-2010 Fumio Nonaka. All rights reserved. |
|||||||