Effizienter Weg, um entfernen Sie ein element aus einem array in Actionscript 3
Ich habe ein array von Objekten. Jedes Objekt hat eine Eigenschaft mit dem Namen name. Ich will effizient entfernen Sie ein Objekt mit einem bestimmten Namen aus dem array. Ist dies der BESTE Weg?
private function RemoveSpoke(Name:String):void {
var Temp:Array=new Array;
for each (var S:Object in Spokes) {
if (S.Name!=Name) {
Temp.push(S);
}
}
Spokes=Temp;
}
InformationsquelleAutor Joshua | 2010-05-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie bereit sind, verbringen einige Speicher auf eine lookup-Tabelle, diese werden dann ziemlich schnell:
Den test für diese sieht wie folgt aus:
}
interessant... so haben Sie grundsätzlich zwei Listen mit doppelte Daten... im Allgemeinen wäre es besser, nur die Verwendung von lookup-Tabellen und verzichten auf arrays für diese Situationen? das funktioniert nur, da das Objekt hat einen
name
- Eigenschaft oder dieindexOf
Methode sucht in jeder Eigenschaft mit dem Wert des Objekts?Ja, wenn Sie dies nicht tun, müssen Sie das array für andere Zwecke (wie das Sortieren oder den Zugriff auf Elemente über index) in diesem Fall könnte man nur mit der lookup-Tabelle. indexOf sucht Instanzen eines Objekts. In diesem Fall ist es nicht die Verwendung von "name" für den Vergleich. Der name wird als hash in der lookup-Tabelle.
+1. Das ist clever. Auf einem nicht verwandten und unangebracht schimpfen, Sie haben zu lieben, wie die Menschen meckern Objekt zu langsam, wenn es oft die Schnellste option, wenn verwendet mit bedacht, und wenn es passt in die Lösung. Das sagte, ich würde persönlich gehen mit nur einem array eine lineare Suche und splice (und keine pre/post-Inkrement/Dekrement-Tricks in-the-loop), es sei denn, es ist eine tatsächliche und echte Notwendigkeit für diese zusätzliche Geschwindigkeit.
InformationsquelleAutor Quasimondo
myArray.splice(myArray.indexOf(myInstance), 1);
InformationsquelleAutor LeManu
Der Schnellste Weg wird sein:
Können Sie auch entfernen Sie die return-Anweisung, wenn Sie möchten, um loszuwerden, alle alements, dass entsprechend der gegebenen Prädikat.
Ließ ich mich auf und vergleichen Sie Ihre "schnellsten" gegen mine und kommen mit schlechten Nachrichten: entfernen von 500 Elemente aus einem 1000-Elemente-array - Ihre 34 ms, mine 4ms 😉
InformationsquelleAutor Joa Ebert
Ich habe keine Daten, um es wieder, aber meine Vermutung ist, dass array.filter vielleicht die Schnellste.
Haha. Sie Jungs betrügen! 😉 Ist array.filter mindestens der Schnellste für die Schleife / iterator-basierten Methoden?
InformationsquelleAutor James Ward
Im Allgemeinen sollten Sie lieber die alten for-Schleife über die "for each" und "für jeden" und Vektor, wenn Ihre Elemente sind vom gleichen Typ. Wenn die Leistung wirklich wichtig sollten Sie eine verlinkte Liste.
Check-out Grant Skinners Folien http://gskinner.com/talks/quick/ und Jackson Dunstan ' s Blog für mehr infos über Optimierung.
InformationsquelleAutor DieTapete
Wenn Euch das nichts ausmacht mit der ArrayCollection, was ist ein wrapper für die Array-Klasse, Sie könnte so etwas tun:
FYI Flex ist einer der tags auf die Frage.
Oh stimmt, hab ich Total verpasst.
Was ist der Punkt, der den Umschlag in der ArrayCollection? Sie konnte nur splice array direkt. Oder bin ich etwas fehlt?
InformationsquelleAutor Robusto
Könnten Sie auch ArrayCollection mit filteranzeige, um einen Blick in das gleiche Array-Objekt
InformationsquelleAutor simms2k
Vielleicht ist diese Technik (optimierte splice-Methode von CJ ' s) verbessern die vorgeschlagenen von Quasimondo:
http://cjcat.blogspot.com/2010/05/stardust-v11-with-fast-array-splicing_21.html
InformationsquelleAutor TurboHz
Hier ist eine effiziente Funktion in Bezug auf die Wiederverwendbarkeit, so dass Sie mehr tun, als das Filterelement entfernen. Es gibt den index oder -1, falls nicht gefunden.
Dank Quasi. Hast du test mit meiner Funktion? Es hat einen zusätzlichen bedingten ( hasOwnProperty ), die verlangsamen würde es aber Sinn machen, wenn du nicht sicher bist, wird das Objekt die Eigenschaft. Um es schneller zu entfernen. Aber der user gefragt, um Effizienz, und diese Funktion spricht an, dass in Bezug auf die Wiederverwendbarkeit.
Getestet habe ich es mit Joa Vorschlag, so die hasOwnProperty war nicht das Problem hier.
InformationsquelleAutor reelfernandes