2010-02-10 18 views
20

Szukałem aby wyczyścić tablicę w języku ActionScript 3.As3 - Jak skutecznie wyczyścić tablicę?

Niektórzy sugerują sposób: (? Przeciek pamięci) array = [];

Inny powie: array.splice(0);

Jeśli masz jakiekolwiek inne, proszę podzielić . Który z nich jest bardziej wydajny?

Dziękuję.

+0

przeciek pamięci? Zbieranie śmieci! – n4pgamer

Odpowiedz

29

array.length = 0 lub array.splice() wydaje się działać najlepiej dla ogólnej wydajności.

array.splice(0); wykona szybciej niż array.splice(array.length - 1, 1);

+1

Wiem, że jest to stary temat, ale jak ustawić tablicę na wartość null? – drpelz

+5

Właściwie 'tablica = null;' pozbywa się samego Array zamiast tylko go czyścić. Zasadniczo to samo dzieje się, gdy 'tablica = [];' poprzednie odniesienie do tablicy zostanie utracone i prawdopodobnie zostanie zbuforowane (co może nie być pożądanym rezultatem). – Biro456

+1

Dlaczego nie 'array = new Array()'? –

2

Zastanawiam się, dlaczego chcesz, aby wyczyścić tablicę w ten sposób? usunięcie wszystkich odniesień do tej samej tablicy spowoduje udostępnienie go do usuwania śmieci. array = [] zrobi to, jeśli array jest jedynym odnośnikiem do array. jeśli nie jest to możliwe, nie powinieneś go emtpying (?)

również, proszę zauważyć, że'Arrays akceptuje ciągi znaków jako klucze. zarówno splicing jak i długość działają wyłącznie na kluczach całkowitych, więc nie będą miały wpływu na klucze String.

btw .: array.splice(array.length - 1, 1); jest równoważna array.pop();

+0

Chciałbym, aby było to możliwe do usuwania śmieci, chcę go opróżnić. – ALOToverflow

+0

Dość pewne tablice w AS3 nie akceptują ciągów jako kluczy. Obiekty robią, ale nie tablice. –

+0

@Onomeldlets: jesteś w błędzie. następnym razem spróbuj zweryfikować swoje wyciągi. – back2dos

1
array.splice(0,array.length); 

to zawsze pracował bardzo dobrze dla mnie, ale ja nie miałem okazji, aby uruchomić go przez profilera jeszcze

2

istnieje klucz różnica między array.pop() i array.splice (array.length - 1, 1), która jest pop spowoduje zwrócenie wartości elementu. To jest dobre dla jednego poręcznych wkładki po oczyszczaniu tablicę jak:

while(myArray.length > 0){ 
    view.removeChild(myArray.pop()); 
} 
6

Do tablicy z 100 elementów (standardy w ms, dolną mniej czasu potrzebnego):

// best performance (benchmark: 1157) 
array.length = 0; 
// lower performance (benchmark: 1554) 
array = []; 
// even lower performance (benchmark: 3592) 
array.splice(0);