3. ActionScriptのシンタックス/3.5 配列
3.5 配列
配列演算子を使う
配列を利用すれば、複数の値を1つの値としてまとめて取り扱うことができて便利です。配列は配列演算子[]を使って作ることができます。値をカンマ(,)で区切り、[]で囲みます。たとえば、次のように配列を作ります。データ型はArrayを指定します。
例:
var myValue:Array = [2, 5, 3, 10, 99];
var myColor:Array = ["red", "green", "yellow"];
var weekj:Array = ["日", "月", "火", "木","金","土"]
配列から値を取り出したり値を更新するには、配列[位置]の式で配列の並びの位置を指して参照します。このとき、位置を左から0、1、2のように0から数えるので注意してください。例を示すと次のようになります。
例:
var colorlist:Array = ["red", "green", "yellow"]
var colorA:String = colorlist[0]; // "red"が入ります。
var colorB:String = colorlist[1]; // "green"が入ります。
例:
var weekj:Array = ["日", "月", "火", "木","金","土"]
var youbi:String = weekj[3] // "木"が入ります。
note:
配列のように複数の要素をひとかたまりで扱うオブジェクトを「コレクション」と呼びます。
■多次元配列
配列の中に配列を入れた多次元配列を作ることができます。多次元配列は複雑なデータを操作する上で有効な手段となります。多次元配列から要素を取り出す例を見てください。
例:
var colorlist:Array = [["red", "pink"], ["wihte", "blue"], ["green", "black"]]
var myColor:String = colorlist [2][1]; // "black"が入ります。
この例では、まずcolorlist[2]の値を取り出します。位置を0から数えるので[2]は左から3番目の ["green", "black"]になります。したがって、続いて ["green", "black"][1]を実行することになります。その結果、myColorには"black"が入ります。
note:
trace([1,2,3])は"1,2,3"、trace([["red", "pink"], ["wihte", "blue"]])は"red,pink,wihte,blue"のように[]を取り去った値が出力されます。
■Arrayクラスを使う
配列はArrayクラスを使って作ることもできます。
例:
var idlist:Array = new Array(33, 56, 74,16, 7);
var sizelist:Array = new Array("S", "M", "L");
この2つの式は、次の式を実行するのと同じ結果です。
例:
var idlist:Array = [33, 56, 74,16, 7];
var sizelist:Array = ["S", "M", "L"];
さらに、配列の要素をArrayクラスのpush()メソッドを使って追加する方法もあります。
例:
var idlist:Array = new Array();
var sizelist:Array = new Array();
idlist.push(33, 56, 74, 16, 7);
sizelist.push("S", "M");
sizelist.push("L");
■配列の値を操作するメソッドとプロパティ
配列の値(エレメント)の個数を調べる、値を追加する、値を削除する、並びを変更するといった操作は、Arrayクラスのメソッドとプロパティを利用します。値の位置は0から数えるので注意してください。
Arrayクラスのメソッドとプロパティ
Array.concat() 配列を連結し、新しい配列として返します。
Array.join() 配列の値を指定のセパレータで結合したストリングを返します。
Array.pop() 配列の最後の値を削除し、削除した値を返します。
Array.push() 配列の最後に値を追加し、配列の値の個数を返します。
Array.reverse() 配列の並びを逆にします。
Array.shift() 配列の最初の値を削除し、削除した値を返します。
Array.slice() 配列の要素を抽出し、新しい配列として返します。
Array.sort() 配列をソートします。
Array.sortOn() 配列内のフィールドに基づいて配列をソートします。
Array.splice() 配列の指定位置に値を挿入・削除し、削除された値を返します。
Array.toString() 値に相当するストリングを返します。
Array.unshift() 値を配列の最初に追加し、配列の新しい長さを返します。
Array.length 値の個数を返します。
例:配列の結合
var aList:Array = [3, 5];
var bList:Array = [9, 8];
var cList:Array = [33, 56];
var x:Array = aList.concat(bList, cList); // [3,5,9,8,33,56]
例:配列の一部を抜き出して新しい配列を作る
var aList:Array = ["a", "b", "c", "d", "e","f","g"];
var x:Array = aList.slice(2, 5); // 3個目から5個→["c", "d", "e"]
var y:Array = aList.slice(4); // 5個目から最後まで→["e","f","g"]
例:最後の値の削除と追加
var aList:Array = ["a", "b", "c", "d"];
aList.pop(); // 最後の値を削除する→["a","b","c"]
aList.push("x"); //最後に値を追加する→["a","b","c","x"]
例:先頭の値の削除と追加
var aList:Array = ["a", "b", "c"];
aList.shift(); // 先頭の値を削除する→["b","c"]
aList.unshift("x"); //先頭に値を追加する→["x", b", c"]
例:指定位置の値の削除と置き換え
var aList:Array = ["a", "b", "c", "d", "e"];
var bList:Array = ["a", "b", "c", "d"];
aList.splice(1, 3); // 位置1から3個を削除する→["a","e"]
bList.splice(1, 2, "x", "y"); // 位置1から2個を置き換える→["a","x","y","d"]
例:値のソート
var myList:Array = [3, 6, 4, 9, 1];
myList.sort(); // 昇順に並べる→[1,3,4,6,9]
myList.sort(Array.DESCENDING); // 降順に並べる→[9,6,4,3,1]
例:値の個数
var aList:Array = ["a", "b", "c"];
var cnt = aList.length; // 3
{}を使った配列オブジェクト
{}を使った配列オブジェクトは、名前と値という組み合わせでデータを管理するいわゆる連想配列に相当する機能です。これはプロパティ名とその値という考え方で、書式は{識別子1:値1, 識別子2:値2, 識別子3:値3, ...}のようになります。データ型はObject型です。
例:配列オブジェクトを作る
var goods:Object = {id:"se24", price:1980, size:"M"};
var shoeData:Object = {color:"blue", size:23.5};
配列オブジェクトの値には、インスタンスのプロパティを参照する場合と同じく、ドット演算子(.)または配列演算子([])を使って参照します。
例:配列オブジェクトから値を取り出す
var theColor:String = shoeData.color;
var theSize:Number = shoeData["size"];
配列オブジェクトの値を変更したい場合にもドット演算子(.)または配列演算子([])を使って参照します。
例:配列オブジェクトの値を変更する
shoeData.color = "green";
shoeData["size"] = 24;
配列を走査する(for~in)
配列や配列オブジェクトのプロパティ名や値を順に調べたい(走査したい)ときにはfor~inが利用できます。変数には、配列の場合には位置が取り出され、オブジェクトの場合にはプロパティ名が取り出されます。
「配列から位置を順に取り出す」
for ( 変数 in 配列){
// 繰り返すスクリプト
}
「配列オブジェクトからプロパティ名を順に取り出す」
for ( 変数 in 配列オブジェクト){
// 繰り返すスクリプト
}
例:配列の値を調べる
var colors:Array = ["red", "blue", "green", "yellow", "pink"];
for (var pn in colors) {
trace(pn + "=" + colors[pn]);
}
出力結果:
4=pink
3=yellow
2=green
1=blue
0=red
例:配列オブジェクトのプロパティ名と値を調べる
var goods:Object = {id:"sd91", name:"fix7", price:2500, volume:1};
for (var pn in goods) {
trace(pn + "=" + goods[pn]);
}
出力結果:
id=sd91
name=fix7
price=2500
volume=1
for~inは{}演算子の配列オブジェクトだけでなく、Objectクラスのインスタンスをはじめ、コアオブジェクト、ユーザー定義のクラスのインスタンスを走査することもできます。ただし、MovieClipオブジェクトなどのコアオブジェクトでは、_x、_yといった既存のプロパティ名は列挙されません。
なお、配列の値の個数はlengthで調べることができます。配列演算子([])を使って順に取り出すスクリプトは次のようになります。このスクリプトで繰り返しのために使用しているfor文はfor~inとは違います。詳しくは次の節で説明します。
例:配列の値を順に取り出す
var colors:Array = ["red", "blue", "green", "yellow", "pink"];
for (i=0; i<colors.length; i++) {
trace(i + "=" + colors[i]);
}
出力結果:
0=red
1=blue
2=green
3=yellow
4=pink