![]() |
Delphi-Version: 7
String/Integer Paare verwalten
Ich suche einen schnellen und unkomplizierten weg um String/IntegerPaare zu speichern, z.B. solche Daten
Meyer=1 Mueller=2743 Schmied=65 Ich habe es zuerst mit einer StringList und .Names bzw .Values gemacht. Es funktionierte und war leicht zu implementieren, aber bei grossen Datenmengen ist es sehr langsam. Eine verketette Pointerliste von Records wäre auch eine Möglichkeit, fand sie aber etwas zu kompliziert, vor allem da in anderen Sprachen solche Sachen extrem einfach sind, z.B. in Lua geht es mit mytable = {}; mytable.Meyer=1; Am Ende bin ich bei Collections gelandet. Es ist zwar schnell, aber der Code ist doch ganz schön umständlich und mit Pech rennt man in external Exceptions rein, weil es Com Objekte sind. Deshalb meine Frage, ob es eine schnelle Lösung für das Problem gibt (für mein nächstes Projekt dann). |
AW: String/Integer Paare verwalten
Kennt dein Delphi das generische TDictionary?
|
AW: String/Integer Paare verwalten
Liste der Anhänge anzeigen (Anzahl: 1)
Zur effizienten Verwaltung von Schlüssel-Wert-Paaren bietet sich eine Hashmap an. Ich habe z.B. für eines meiner aktuellen Projekte so eine implementiert, und da ich sowieso vorhatte, die früher oder später mal in der CodeLib zu veröffentlichen, kann ich das ja vorab auch hier schon mal tun. Das Hinzufügen von etwas mehr als einer Million Items schafft meine Hashmap in 0.6 Sekunden, das anschließende Auslesen all dieser Items dauert zusammen 0.4s auf meinem Rechner (Vista 32Bit, 2.4Ghz Quad, 3GB DDR-2 RAM).
Derzeit im Angebot habe ich allerdings nur eine String-String-Map und eine Widestring-Object-Map, wobei letztere recht speziell auf mein Projekt angepasst ist, sodass ich sie mal außen vor gelassen habe. Weitere Varianten wie String-Integer-Maps oder Integer-String-Maps usw. hatte ich noch vor zu implementieren, bevor ich die Klasse in der CL veröffentliche, bin aber noch nicht dazu gekommen. Das ganze ist aber bewusst so konzipiert, dass man mit relativ wenig Aufwand neue Varianten von der Basisklasse ableiten kann. Eine String-Integer-Map sollte sich damit also auch recht einfach umsetzen lassen. Ich hänge die Sourcen mal hier an, vielleicht kannst du ja was damit anfangen. |
AW: String/Integer Paare verwalten
Zitat:
Delphi-Quellcode:
list := TStringList.Create;
list.Sorted := true; list.AddObject('Meyer', TObject(1)); list.AddObject('Mueller', TObject(2743)); list.AddObject('Schmied', TObject(65)); ... idx := list.IndexOf('Mueller'); val := Integer(list.Objects[idx]); |
AW: String/Integer Paare verwalten
Zitat:
![]() |
AW: String/Integer Paare verwalten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz