Wenn ich eine geordnete Liste in Firebase verwalten möchte, scheint es die beste Möglichkeit zu sein, jedem Element in meiner Liste manuell eine Priorität zuzuweisen. Das heißt, wenn ich ein Element aus der Liste einfüge oder entferne, muss ich die Prioritäten aller folgenden Elemente aktualisieren. Für einen Eintrag am Anfang der Liste bedeutet dies, dass alle Einträge in der Liste aktualisiert werden. Gibt es in diesem Fall eine bessere Datenstruktur oder einen besseren Algorithmus?Leistung einer geordneten Liste in Firebase
Antwort
Sie können eine geordnete Liste erstellen, indem Sie die Priorität der Elemente entsprechend festlegen. Elemente in einer Liste werden lexigraphisch nach Priorität sortiert, oder wenn die Priorität durch einen numerischen Wert in eine Zahl geparst werden kann.
Wenn Sie Elemente in die Mitte einer vorhandenen Liste einfügen möchten, würde das Ändern der Prioritäten der vorhandenen Elemente funktionieren, wäre aber furchtbar ineffizient. Ein besserer Ansatz besteht darin, eine Priorität zwischen den beiden Elementen auszuwählen, an denen Sie den Wert einfügen und diese Priorität für das neue Element festlegen möchten.
Wenn Sie beispielsweise Element 1 mit der Priorität "a" und Element 2 mit der Priorität "b" hätten, könnten Sie Element 3 mit der Priorität "aa" (oder "aq", "az") einfügen. etc).
Nach unseren Erfahrungen wissen Sie in den meisten Fällen, wenn Sie eine geordnete Liste erstellen, nicht unbedingt die Position in der Liste, in die Sie das Element vorher einfügen möchten. Wenn Sie zum Beispiel eine Rangliste für ein Spiel erstellen, wissen Sie nicht im Voraus, dass Sie eine neue Punktzahl als 3. in die Liste aufnehmen möchten. Sie wissen also, dass Sie sie an jeder Position einfügen möchten, die 10000 erreicht (was vielleicht der dritte sein könnte). In diesem Fall genügt es, die Priorität auf die Punktezahl zu setzen. Sehen Sie unser Leaderboard Beispiel hier: https://www.firebase.com/tutorial/#example-leaderboard
Danke für die schnelle Antwort. In diesem Fall möchte ich eine Drag-and-Drop-Liste erstellen, so dass die Reihenfolge vom Benutzer definiert wird. Ich mag die Idee, eine Priorität zwischen die beiden gewünschten Elemente zu setzen, aber ich bleibe bei einer Sache hängen: Woher weißt du, was das nächste Element ist, wenn du einen "child_added" Callback verwendest? Sie erhalten nur den vorherigen Artikel, nicht den nachfolgenden. –
Haben Sie jemals eine gute Lösung für die willkürliche Reihenfolge gefunden, @RadfordSmith? –
Das Rubin Juwel ranked_model hat einen interessanten Ansatz für dieses Problem. Es verwendet eine Positions-Ganzzahl wie viele andere "Acts als Liste" -Implementierungen, aber es ist nicht darauf angewiesen, alle Ganzzahlen bei jeder Positionsbewegung neu zu schreiben. Stattdessen werden die Ganzzahlen weit voneinander entfernt, sodass sich jede Aktualisierung nur auf eine oder zwei Zeilen auswirkt. Vielleicht lohnt es sich, in der Readme und im Code nachzusehen, ob dieser Ansatz hier passt.
- 1. Listenelemente in Listenelementen einer geordneten Liste verschachteln?
- 2. Verwenden einer geordneten Liste in IndexedDB
- 3. Auflösen mehrdeutiger Kategorien in einer geordneten Liste
- 4. Sortieren einer Liste von einem geordneten Index
- 5. Firebase - verbessert Caching die Leistung?
- 6. Leistung von LinkedList vs ArrayList bei der Verwaltung einer geordneten Liste
- 7. Binary Suche in einer geordneten Liste in java
- 8. Ändern Sie die Nummerierung in einer geordneten Liste?
- 9. Funktion zum Erkennen von Änderungen in einer geordneten Liste
- 10. Abrufen der Werte in einer nicht geordneten Liste und Listenelemente
- 11. String-Matching in einer alphabetisch geordneten Liste (der MATLAB-Weg)
- 12. cartesianischen Leistung einer Liste in Erlang
- 13. Liste der geordneten Tupel als CSV speichern
- 14. Wie wähle ich ein Listenelement aus einer geordneten Liste?
- 15. C: Erstellen einer geordneten Liste durch Überprüfen von 2 Werten
- 16. Entfernen Sie den linken Abstand von einer geordneten Liste (OL)
- 17. Liste Manipulation Leistung in Haskell
- 18. CSS ändern Stil der nicht geordneten Liste?
- 19. C Erstellen einer geordneten Prioritätswarteschlange
- 20. Ein Wort zu einer geordneten Listennummer vorfixieren
- 21. Firebase Wert in angular2, wenn sie in einer Liste angezeigt
- 22. C# geordneten Kombinationen Algorithmus
- 23. Leistung der Liste (...). Einfügen (...)
- 24. Leistung von Firebase mit großen Datensätzen
- 25. Hinzufügen von Elementen zu einer Liste in Firebase unter Android
- 26. Speichern von Daten aus Firebase in einer Liste
- 27. SQL NICHT IN [Liste der IDs] (Leistung)
- 28. Wie man in einer geordneten Liste in SQL darstellt und einfügt?
- 29. Abrufen eines geordneten Wertepaars
- 30. Gegeben eine Zahl X, schätzen, wo in einer geordneten Liste von Primzahlen diese Zahl fallen kann
Ich habe dies bearbeitet, um nach einem besseren d.s. oder Algorithmus - die einzige faire Antwort auf "Ist das schnell genug?" Ist "hast du es profiliert?" – djechlin
Was ist der Algorithmus zum Sortieren? Alphabetisch? Numerisch? Nach Zeitstempel? Ich denke über diese nebulösen Fragen nach Firebase nach und stelle fest, dass sie viel einfacher zu lösen sind, nachdem ich das gewünschte Verhalten sorgfältig identifiziert habe. – Kato