2009-09-25 10 views
13

私はFlex/ActionScriptでアプリケーションを作成しており、データを格納するArray型の多数のクラスメンバー変数を持っています。ActionScript配列からすべての要素を削除する最も良い方法は?

私の質問は、Arrayオブジェクトをクリアする「最良の」方法は何ですか?

ArrayCollectionクラスには、これを行うremoveAll()関数がありますが、基本的なArrayクラスはそうではありません。私はと考えられてきたいくつかの可能性がある:配列を反復

  • 、「新しいアレイ()」にメンバ変数を設定する0
  • に配列の長さを設定する
  • 各要素に対してポップやシフトを呼び出しますまたは "[]"

答えて

15

は、私が言うと思います:、明示的に短いだし、VMのごみの良い利用し

myArray = [ ]; 

をコレクタ。

あなたの最初の選択肢は、同じ結果を得るために多くの解釈済みコードを実行します。

私は、第2のものがあなたが望むことをしているのか分かりません。それがあれば、それは明らかではありません。

3番目の代替案の「新しいArray()」バリアントは単なるwordyなので、配列リテラルよりも利点はありません。 JSを書いてJSLintを使用すると、配列リテラルフォームを使用していないために怒鳴ります。

+3

セット長さ= 0はハックではありません公式as3 lang refがそれを言いました:http://help.adobe.com/en_US/AS3LCR/Flash_10.0/Array.html#length。私は個人的にもこの方法を使用します。私はChristopher W. Allen-Pooleにあなたの方法がアレイを実際にクリアしていないことに同意します。 –

+0

myArray.length = 0という意味では、読者に伝えるべきものがすべて「配列の削除」であるときに、配列の不必要な記述要素を導入するという意味では不明です。長さ設定の切り詰め機能は、最初は追加ボーナスの一種として私を襲った。とにかく、Christopher W. Allen-Poole(cwallenpoole)のレスポンスは非常に意味があり、 "スプライス"操作がよりリテラルなので、項目を削除するように特別に設計されているため、やや明らかです。 – Pup

8

状況によって異なります。あなたが実際に空の場合、一方

var foo:Array 
var bar:Array 
foo = bar = [ 1, 2, 3 ]; 
bar = []; 
trace(foo); // 1,2,3 

:ヤング氏の答えを使用すると、多くの場合、物事を行うには、最も正しい方法ですが、それは常にあなたが同じ配列を指す2つの変数を持っている場合は特に、動作しません。

var foo:Array 
var bar:Array 
foo = bar = [ 1, 2, 3 ]; 
var l:int = bar.length; // get the length FIRST! 
         // Otherwise bar.length will change 
         // while you iterate! 

for(var i:int = 0; i < l; i++) 
{ 
    bar.shift(); 
} 
trace(foo); // does not trace anything 
+1

while(bar.length> 0)bar.shift(); // :) –

+5

bar.splice(0); //ループは不要です。 –

7

もし私がウォーレンの答えに行くならば、配列の参照を変更することができます。既存のインスタンスを変更する必要がある場合は、Array.spliceを使用することができます:私が言って怖い

var arr : Array = [1, 2, 3, 4, 5]; 

arr.splice(0, arr.length); 
+1

arr.splice(0);より良い:arr.length = 0; –

14

が、彼が言ったとき、ウォーレン・ヤングは間違っているという設定MyArrayという= []ガベージコレクタをピックアップする原因配列。

その中に自身への参照を追加することができるため、決して収集されずメモリを使い果たしてしまいます。特に配列にスプライトがいくつかあります。彼らも決して集められません。

Sly_cardinalとRichard Szalayは100%正確です。 Richardの場合、lengthパラメータは必要ありません。

に完全に明確な配列とを確認して、そのゴミが収集し、その後

myArray.splice(0); 
myArray = null; 
1

最高方法は長さを設定することであるthis testによる= 0

関連する問題