(section03-01 Arrayクラスの配列から抜粋)
配列は数値やストリングなどと違ってオブジェクトなので、配列を変数に代入するとリファレンス型の変数になります。たとえば、配列の入った変数alistを変数blistに代入したとき、どちらも同じ配列を参照しています。配列alist、blistに対して値の追加などの操作を行ったとき、片方の配列に操作した内容が両方に影響してしまいます。
[:script:]配列を複製したつもりでも同じ配列を参照している
[:script:]配列を複製する
配列は数値やストリングなどと違ってオブジェクトなので、配列を変数に代入するとリファレンス型の変数になります。たとえば、配列の入った変数alistを変数blistに代入したとき、どちらも同じ配列を参照しています。配列alist、blistに対して値の追加などの操作を行ったとき、片方の配列に操作した内容が両方に影響してしまいます。
[:script:]配列を複製したつもりでも同じ配列を参照している
var alist:Array=[1,2,3]; //blistにalistを代入する var blist:Array=alist; alist.push("x");//alistに"x"を追加 blist.push("y");//blistに"y"を追加 //どちらも同じ値になっている trace(alist);//出力:1,2,3,x,y trace(blist);//出力:1,2,3,x,y配列を複製したい場合にはslice()が利用できます。slice()の引数を省略するとslice(0)を実行した場合と同じになり、配列のすべての値を複製した新しい配列を作ることができます。
[:script:]配列を複製する
var alist:Array=[1,2,3]; //blistにalistを複製して代入する var blist:Array=alist.slice(); alist.push("x");//alistに"x"を追加 blist.push("y");//blistに"y"を追加 //alistとblistは個別の配列になっている trace(alist);//出力:1,2,3,x trace(blist);//出力:1,2,3,y