itsukichang

フロントエンドが得意なエンジニア.ダーツと旅行とギターが好き

ActionScript3.0 配列操作

久しぶりの記事.
またもうすぐテストがあるんだけどね><

とりあえずAS3.0の配列周りまとめてみたりしてみる.


はてな記法ほとんど忘れた\(^o^)/

配列生成

//その1
var hoge:Array;
hoge = new Array:

//その2
var hoge:Array = new Array(n); //nは要素数. なしでもok.要素数が動的に変化する
hoge[0] = "piyo";
hoge[1] = "miko";

//その3
var hoge:Array;
hoge = new Array("piyo","miko","shine");

//その4
var hoge = ["piyo","miko","shine"];

//その5
var hoge:Array = new Array("piyo","miko","shine");

などなど
データ型の指定は無し.同じ配列内に別のデータ型いれてもよし.

配列操作メソッド

sort
var  hoge:Array = new Array(3,40,5,10,100,8,2); // 配列インスタンス生成
hoge.sort(); //sortメソッド使用 

/*
sort()メソッドの引数には比較関数を指定する.無い場合には文字コード順にソートされる.

上記の場合だと,ソート結果は[10,100,2,3,40,50,8]となる
比較関数の戻り値は 2つの値を比べ,初めの値の方が小さければ,負の値(-1),大きければ正の値(1),等しければ0を返す.
*/

//比較関数を使用し,値を昇順でソートする.

hoge.sort(piyo);
trace(hoge);

funciton piyo(a:Number,b:Number):int {
    return a - b;
}
join
var hoge:Array = new Array("miko","miko",""); //インスタンス生成
var piyo:String;

piyo = hoge.join("さん"); 
trace(piyo);

/*
実行結果は,「mikoさんmikoさん」となる.
配列内の要素をjoinの引数(String型)と連結させる.
*[ActionScript][ActionScript]/
その他ダイジェストー

reverse():Array    ・・・配列内の要素の逆転
forEach(callback):void ・・・配列の各要素に対して指定した関数を実行する(コールバック関数)
map(callbacl):Array  ・・・配列の各要素に対して指定した関数を実行し,結果を別の配列に格納する
filter(callback):Array ・・・関数の結果に応じて要素を取り出す

他 concat() every() push() shift() pop() unshift() などなど

いっぱいあるので,また書きます.

連想配列

配列の要素に添字の代わりにキーを指定する.

生成
//その1

var hoge:Object = new Object(); 
hoge["piyo"] = "miko"; // "piyo"というキーの連想配列に"miko"という文字列代入.

//その2

var hoge:Object = new Object();
hoge.piyo = "miko";

//その3

var hoge:Object = {piyo:"miko",huga:"mikomiko"};

//その4

var hoge:Array = new Array();
hoge["piyo"] = "miko";
hoge.piyo2 = "miko";
アクセス

for-in と for each-in
違いは前者は連想配列からキー名を取り出して変数に格納.ただし取り出される順はなぜかランダム.
後者は値を順に取り出して変数に格納.

//for-in

var hoge:Object = new Object();
hoge.hoge1 = "miko1";
hoge.hoge2 = "miko2";
hoge.hoge3 = "miko3";


for(var i:String in hoge) {
    trace(i); //キーを表示 この場合, hoge1 hoge2 hoge3 がランダムな順で表示される
}


//for each-in

var hoge:Object = new Object();
hoge.hoge1 = "miko1";
hoge.hoge2 = "miko2";
hoge.hoge3 = "miko3";

for each(var i:String in hoge) {
    trace(i); //値を表示 この場合,miko1 miko2 miko3が順に表示される.


連想配列はこんなもん.
でも,オブジェクトリテラル(var hoge:Object = {~~~~~~};)で宣言した連想配列を for each-inでしたらランダムになったり,
for each-inで値取り出せるのは統一された型の時だけで不便(?)だったり.
色々問題点的なものを見つけました><


似たような記事が(JavaScriptばーじょん)id:amachangさんの所にありました.JS使いの人は是非こちらを参考に><
JavaScript の配列と連想配列の違い - IT戦記




そういえば,はてな記法シンタックスハイライトがActionScript対象外ってどういうことだ>< ぷんすか.