Ich habe eine Anwendung, die Dateien auf dem Computer (konfigurierbarer Pfad, Typ usw.) durchsucht. Derzeit fügt es Informationen zu einer Datenbank hinzu, sobald eine übereinstimmende Datei gefunden wird. Statt dessen möchte ich die Information im Speicher für weitere Manipulation halten, bevor sie in die Datenbank eingefügt wird. Die Liste kann viele Elemente enthalten. Ich betrachte Leistung als wichtigen Faktor. Ich muss möglicherweise durch die Elemente iterieren, so dass eine Struktur, die leicht codiert werden kann, ein anderes Schlüsselproblem ist. und wie kann ich assoziative Arrays im PHP-Stil für diesen Job erreichen?Welcher Datatyp/Struktur zum Speichern von Dateilisten-Informationen?
Antwort
Probieren Sie den AVL-Tree von http://sourceforge.net/projects/alcinoe/ als assoziative Array. Es hat eine Iterate-Methode für schnelle Iteration. Sie müssen möglicherweise von seiner Basisklasse ableiten und Ihren eigenen Komparator implementieren, aber es ist einfach zu bedienen.
Beispiele sind enthalten.
Wenn Sie Delphi 2009 verwenden, können Sie ein TDictionary verwenden. Es benötigt zwei generische Parameter. Der erste sollte eine Zeichenfolge für den Dateinamen sein und der zweite wäre der Datentyp, mit dem Sie verknüpft sind. Es hat auch drei eingebaute Enumeratoren, einen für Schlüssel-Wert-Paare, einen nur für Schlüssel und einen nur für Werte, was die Iteration vereinfacht.
Eine andere Lösung wäre, nur eine standardmäßige TStringList zu verwenden.
Solange es sortiert ist und einige andere Einstellungen als dupAccept enthält, können Sie indexof oder indexofname verwenden, um Elemente in der Liste schnell zu finden.
Es verfügt auch über den Zusatz "Objects", mit dem Sie Objektinformationen, die an den Namen angehängt sind, speichern können. Ab TS2009 verfügt TStringList über die OwnsObject-Eigenschaft, mit der Sie die Objektbereinigung an die TStringList delegieren können. Vor D2009 müssen Sie selbst damit umgehen.
Viel davon hängt davon ab, wie Sie die Liste verwenden und in welchem Umfang. Wenn Sie es als Stapel oder Warteschlange verwenden möchten, würde ein TList funktionieren. Wenn Sie die Liste nach einem bestimmten Element durchsuchen müssen, benötigen Sie etwas, das ein schnelleres Abrufen ermöglicht. TDictionary (2009) oder TStringList (vor 2009) wäre die wahrscheinlichste Wahl.
Dynamische Arrays sind auch eine Möglichkeit, aber wenn Sie sie verwenden, sollten Sie die Verwendung von SetLength minimieren, da es jedes Mal, wenn es aufgerufen wird, Speicher neu zuordnen wird. TList verwaltet dies für Sie, weshalb ich eine TList vorgeschlagen habe. Wenn Sie wissen, mit wie viel Sie im Voraus zu tun haben, verwenden Sie ein dynamisches Array und legen Sie seine Länge auf den Beginn fest.
Wenn Sie mehr Elemente haben, als in den Speicher passen, ändern sich auch Ihre Auswahlmöglichkeiten. An diesem Punkt würde ich entweder eine Datenbanktabelle oder einen tFileStream verwenden, um die zu verarbeitenden Datensätze zu speichern, und dann den Anfang der Tabelle/des Datenstroms zur Verarbeitung suchen.
- 1. Welcher Typ zum Speichern von Prozenten
- 2. Welcher Typ von MySQL-Spalte zum Speichern von Dump?
- 3. Welcher Datentyp wird in MySQL zum Speichern von Bildern verwendet?
- 4. welcher Datentyp zum Speichern meiner Liste in C#
- 5. Konfigurationseinstellungen für Webanwendungen - Welcher ist der bessere Ort zum Speichern?
- 6. Welcher Typ von ArrayList wird zum Speichern von Drawable-Variablen in Android verwendet
- 7. DataStructure zum Speichern von Paaren
- 8. Übergeben von Parametern zum Speichern()
- 9. Datenstruktur zum Speichern von Telefonbuchdaten
- 10. Funktion zum Speichern von ggplot
- 11. Vorschläge zum Speichern von Daten
- 12. Welcher Weg zum Strukturieren von Daten für benutzergenerierte Formularvorlagen
- 13. SQL Tabellenstruktur zum Speichern von täglichen Aktivitäten von Benutzern
- 14. Schreiben Logik zum Speichern von Daten in Mysql zum Speichern von Metadaten von Dateien
- 15. Beispiel zum Speichern von Audio von RemoteIO?
- 16. Verwenden von SSkeychain zum Speichern von Zugriffstoken
- 17. Datenstruktur zum Speichern von Milliarden von Ganzzahlen
- 18. Verwenden von Variablen zum Speichern von Werten oder zum direkten Abrufen von Werten aus den Objekten?
- 19. Welcher Weg zum Setzen von Feldern ist besser und warum?
- 20. Datentyp zum Speichern der 20-stelligen Nummer
- 21. Best Practice zum Speichern von Bildern in SQL Server
- 22. PHP - Speichern von Funktionen zum späteren Ausführen
- 23. Verwenden einer Hashtabelle zum Speichern von Schlüsseln?
- 24. Datenbank Design zum Speichern von Essen Rezepte
- 25. Cookie zum Speichern von Post-Werten
- 26. Node.js Compression Proxy zum Speichern von Daten
- 27. iCloud zum Speichern von Audiodateien - mehrere Fragen
- 28. Pfad im Server zum Speichern von Bildern
- 29. Entity Framework nicht zum Speichern von Daten
- 30. Verzeichnis zum Speichern von Audiodateien unter Android