Chap03 配列とベクターと結合配列: 2009年8月アーカイブ

(section03-01 Arrayクラスの配列から抜粋)

 配列の長さ、すなわちエレメント(値)の個数はlengthプロパティで調べます。配列のインデックス番号は0からカウントしますが、lengthは1から数えます。

[:script:]配列の値の個数を調べる
var colors:Array=["red","green","yellow"];
var weekj:Array=new Array("日","月","火","水","木","金","土");
trace(colors.length);//出力:3
trace(weekj.length);//出力:7
 lengthは読み出しだけでなく値の設定も可能です。lengthを設定すると配列がその長さに変更されます。配列の長さよりも大きな値を設定するとundefinedが追加され、小さな値を設定すると長さに合わせてエレメントが後ろから削除されます。

[:script:]配列の長さを指定する
var colors:Array=["red","green","yellow","black"];
//配列より長いlengthを指定する
colors.length=8;
trace(colors);//出力:red,green,yellow,black,,,,
//配列より短いlengthを指定する
colors.length=3;
trace(colors);//出力:red,green,yellow
note 配列の長さを固定したい場合はVectorクラスを利用します。→ベクターのエレメントの個数を制限する

 次の例は配列からランダムに値を選ぶスクリプトです。randomValue()の2行目で配列の値の個数を元にランダムなインデックス番号を作り、3行目でリストから値を取り出します。

[:script:]配列からランダムに値を選ぶ
function randomValue(list:Array):String {
	var index:uint = Math.floor(Math.random() * list.length);
	var v:String = list[index];
	return v;
}

var colors:Array = ["red","green","blue","pink","black"];
//配列colorsから1色選ぶ
var color:String = randomValue(colors);
trace(color);
(section03-01 Arrayクラスの配列から抜粋)

 これまでの例では配列を演算子[]で作りましたが、配列のデータ型はArrayクラスであり、new演算子を使ってArrayクラスのインスタンスとして作ることができます。

[:script:]Arrayクラスのインスタンスとして配列を作る
var colors:Array=new Array("red","green","yellow");
var weekj:Array=new Array("日","月","火","水","木","金","土");
var vlist:Array=new Array(2900,"XA","white");
 new Array()で配列を作る場合、通常は引数で指定した値がそのまま配列のエレメント(要素)の値になりますが、引数が整数1個の場合は引数で指定した個数の配列が作られます。配列のエレメントの値は空(undefined)です。たとえば、次のスクリプトの4行目ではnew Array(5)で[5]ではなく[,,,,]が作られます。

[:script:]Array()の引数が整数1個のときに結果が違う
var vlist1:Array=new Array();//空の配列[]
var vlist2:Array=new Array("red");//配列["red"]
var vlist3:Array=new Array(5,3);//配列[5,3]
var vlist4:Array=new Array(5);//配列[,,,,]
(section03-01 Arrayクラスの配列から抜粋)

 配列の中に配列を入れた多次元配列を作ることができます。多次元配列は複雑なデータを操作する上で有効な手段となります。次のスクリプトは多次元配列から値を取り出す例です。

[:script:]多次元配列から値を取り出す
var colors:Array=[["red","pink"],["wihte","blue"],["green","black"]];
var myColor:String=colors[2][1];
trace(myColor);//出力:black
 2行目のcolors[2][1]では、まずcolors[2]の値を取り出します。位置を0から数えるので[2]は左から3番目の ["green", "black"]です。したがって、続いて ["green", "black"][1]を実行することになります。その結果、myColorには"black"が入ります。
(section03-01 Arrayクラスの配列から抜粋)

 配列とは仕切りで区切られた容器に複数の物を納めていくように、複数のデータを1個のグループのように扱える機能です。配列は配列演算子[]を使って作ることができます。値をカンマ(,)で区切り、[]で囲みます。データ型はArrayを指定します。

[:script:]配列演算子[]で配列を作る
var colors:Array=["red","green","yellow"];
var weekj:Array=["日","月","火","水","木","金","土"];
var vlist:Array=[2900,"XA","white"];

配列から値を取り出す
 配列から値を取り出すには、配列[インデックス番号]の式で配列の並びの位置を指して参照します。このとき、インデックス番号を左から0、1、2のように0から数えるので注意してください。値を取り出しても元の配列は変化しません。

[:script:]配列から値を取り出す
var colors:Array=["red","green","yellow"];
var colorA:String=colors[0];
var colorB:String=colors[1];
trace(colorA);//出力:red
trace(colorB);//出力:green
trace(colors);//出力:red,green,yellow

配列の値を入れ替える
 配列の値の位置を指して値を代入すれば、その位置の値が入れ替わります。

[:script:]配列の値を入れ替える
var colors:Array=["red","green","yellow"];
colors[1]="black";
trace(colors);//出力:red,black,yellow
 配列に入っている値の個数よりも大きなインデックス番号を指定して値を代入すると、途中の値は空のままで指定の位置に値が入ります。

[:script:]位置を指定して値を入れる
//空の配列を作る
var myArray:Array=[];
//値を入れる
myArray[0]="a";
myArray[1]="b";
myArray[4]="e";
trace(myArray);//出力:a,b,,,e
 配列の空の位置の値を取り出すとundefiendになります。なお、undefiendは取り出した値を入れる変数のデータ型に応じて値が変換されます。たとえば、String型ならばnull、int型ならば0に変換されます。

[:script:]値がない位置の値を取り出した結果
var myArray:Array=["a","b",,,"e"];
//値がない位置
trace(myArray[3]);//出力:undefined
//値の個数より大きなインデックス番号
trace(myArray[9]);//出力:undefined

//String型の変数に代入した場合
var v3:String=myArray[3];
trace(v3);//出力:null
//int型の変数に代入した場合
var v9:int=myArray[9];
trace(v9);//出力:0
■この訂正は初版のものです。

p.110 のsplice()の説明が間違っていました。内容を訂正しお詫びします。間違っていたのは、第2引数で指定する値がendIndexではなく、deleteCountである点です。さらに第3引数以降で値を挿入できます。
splice()は次のようなメソッドです。p.108のslice()とスペルが似ているので注意です。また、インデックス番号は0から数えるので、「1番目」とは2個目の値を指しています。番目を「インデックス番号」と読み替えてください。

訂正文:
 抜き取る際に値を複製せずに元の配列から値を削除します。また、値を抜き取った位置に新しい値を代わりに挿入することもできます。これにより、splice()は値を抜き出すだけでなく、配列の値の削除や置換の目的でも利用できます。
 splice()の書式は次のとおりです。第1引数startIndexは抜き取り開始位置のインデックス番号、第2引数のdeleteCountでは抜き取る値の個数を指定します。入れ替える値は第3引数以降にカンマで区切って指定します。

書式:
splice(startIndex:int, deleteCount:uint, ... values):Array

 次の例では配列stockListのインデックス番号1から4個の値を抜き取って新しい配列pickUpListを作成します。元の配列stockListからは抜き取られた値が削除されています。

[:script:]配列のインデックス番号1から4個の値を抜き取る
var stockList:Array = ["a","b","c","d","e","f"];
var pickUpList:Array = stockList.splice(1,4);
//取り出した配列
trace(pickUpList);//出力:b,c,d,e
//元の配列からは値が抜き取られて削除されている
trace(stockList);//出力:a,f
 splice()は第2引数以降を省略できます。splice(3)のように引数を省略するとインデックス番号3から最後までの値を抜き出します。

[:script:]配列のインデックス番号3から最後までの値を抜き出す
var stockList:Array=["a","b","c","d","e","f"];
var pickUpList:Array=stockList.splice(3);
trace(pickUpList);//出力:d,e,f
trace(stockList);//出力:a,b,c
 引数をマイナスにすると末尾から個数を数えて取り出します。次の例は末尾から4個の値を取り出した配列を作ります。元の配列のstockListからは末尾の4個が削除されています。

[:script:]配列の末尾から4個を抜き出す
var stockList:Array=["a","b","c","d","e","f"];
var pickUpList:Array=stockList.splice(-4);
trace(pickUpList);//出力:c,d,e,f
trace(stockList);//出力:a,b

追加サンプル:
値を入れ替えるサンプルがないので、ここに新しいサンプルを追加しましょう!

[:script:]配列のインデックス番号2から3個の値を抜きとり、代わりに"X"、"Y"を挿入する。
var stockList:Array=["a","b","c","d","e","f"];
var pickUpList:Array=stockList.splice(2,3,"X","Y");
trace(pickUpList);//出力:c,d,e
trace(stockList);//出力:a,b,X,Y,f
まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

このアーカイブについて

このページには、2009年8月以降に書かれたブログ記事のうちChap03 配列とベクターと結合配列カテゴリに属しているものが含まれています。

前のアーカイブはChap03 配列とベクターと結合配列: 2009年7月です。

次のアーカイブはChap03 配列とベクターと結合配列: 2009年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ