« Flash プロフェッショナル・スタイル CS3対応 | メイン | 3.1 配列の操作(5)配列を連結する »

3.1 配列の操作(4)配列を複製する

■配列を複製する slice()
配列は数値などと違ってオブジェクトなので、複数の同じ値をもった配列を作りたい場合などでは複製において注意が必要です。たとえば、次の変数a、bには最初は数値の5が入っています。bの値に3を加算するとaは5のままでbだけが8に変化します。つまり、b = aの式ではaに入っている5がbに複製されこの時点では両者共に5になりますが、a、bの値はこの後で変更しても互いに影響を及ぼしません。

[:sample:] duplicate-1.fla
例:
var a:int, b:int;
a = 5;
b = a;
trace(a,b);
//出力:5 5
b += 3;
trace(a,b);
//出力:5 8

これと同じに見える操作を配列alist、blistに対して行った場合、片方の配列に操作した内容が両方に影響してしまいます。このことから、alistとblistは同じ配列を参照していることがわかります。

[:sample:] duplicate-2.fla 例: var alist:Array, blist:Array; alist = new Array(1,2,3); blist = alist; trace(alist, blist); //出力:1,2,3 1,2,3 //alistに"x"を追加 alist.push("x"); //blistに"y"を追加 blist.push("y"); trace(alist, blist); //出力:1,2,3,x,y 1,2,3,x,y
配列を複製したい場合にはslice()が利用できます。slice()の引数を省略するとslice(0)を実行した場合と同じになり、配列のすべての値を複製した新しい配列を作ることができます。

[:sample:] duplicate-3.fla
例:
var alist:Array, blist:Array;
alist = new Array(1,2,3);
blist = alist.slice();
trace(alist, blist);
//出力:1,2,3 1,2,3
//alistに"x"を追加
alist.push("x");
//blistに"y"を追加
blist.push("y");
trace(alist, blist);
//出力:1,2,3,x 1,2,3,y

About

2007年6月19日 07:29に投稿されたエントリーのページです。

ひとつ前の投稿は「Flash プロフェッショナル・スタイル CS3対応」です。

次の投稿は「3.1 配列の操作(5)配列を連結する」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。