2009年8月18日火曜日

配列を複製する

配列の内容をコピーしたいと思い、以下のように記述すると、参照している配列は同じなので、新しい配列(の参照)に記述した内容が、元の配列にも影響してしまう。

  1. var arr1:Array = ['a','b','c','d','e'];  
  2. var arr2:Array = arr1;  
  3. trace('arr1 : ' + arr1.length); // arr1 : 5  
  4. trace('arr2 : ' + arr2.length); // arr2 : 5  
  5. arr2.shift();  
  6. trace('arr1 : ' + arr1.length); // arr1 : 4  
  7. trace('arr2 : ' + arr2.length); // arr2 : 4  

Array クラスの slice 関数は、指定したインデックス間を抜き出して新しい配列を作ってくれる。インデックスを省略すると、開始から終了まで全ての値を抜き出してくれるので、これでOK。

  1. var arr1:Array = ['a','b','c','d','e'];  
  2. var arr2:Array = arr1.slice();  
  3. trace('arr1 : ' + arr1.length); // arr1 : 5  
  4. trace('arr2 : ' + arr2.length); // arr2 : 5  
  5. arr2.shift();  
  6. trace('arr1 : ' + arr1.length); // arr1 : 5  
  7. trace('arr2 : ' + arr2.length); // arr2 : 4  

0 件のコメント:

コメントを投稿