Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hashmap oder ähnlich... (https://www.delphipraxis.net/127377-hashmap-oder-aehnlich.html)

Weazy 12. Jan 2009 14:33


Hashmap oder ähnlich...
 
Hallo, ich habe folgendes Problem: ich muss immer einen String und einen Integer oder int64 zusammen abspeichern können. Derzeit habe ich es so gelöst, dass ich einfach zwei dynamische arrays habe, eines für die Strings und eines für die zahlen. Ich möchte nun nach einem String im array suchen und wenn dieser String existiert die passende zahl ausgeben. Meine Lösung funktioiert auch, doch gibts da nicht etwas effizientere`s? In Java gabs eine Hashmap, gibt es so was ähnliches in Delphi?

worker 12. Jan 2009 14:38

Re: Hashmap oder ähnlich...
 
THashedStringList

Weazy 12. Jan 2009 14:52

Re: Hashmap oder ähnlich...
 
Danke, das hilft mir schon mal, jedoch brauche ich noch etwas womit ich nicht einfach den index, sondern eine selbst definierbare zahl eingeben kann. Die einträge sid dateinamen mit grössen angabe...

Codewalker 12. Jan 2009 14:56

Re: Hashmap oder ähnlich...
 
Zitat:

Zitat von worker
THashedStringList

btw: steht in der Unit IniFiles

In der Unit Contrns gibt es noch TObjectBucketList und diverse Abwandlungen, die können ganze Objekte speichern und zuordnen - das geht mit einer THashedStringList nicht mehr wirklich schön. Und ab Delphi 2009 steht so etwas auch als Generic zur Verfügung (ich meine TDictionary<T> oder so ähnlich)

worker 12. Jan 2009 15:15

Re: Hashmap oder ähnlich...
 
Du schreibst, dass Du nach einem Dateinamen suchen, und Dir dazu die Größe ausgeben lassen möchtest; und das kannst Du doch mit der HashedStringList, wenn Du das Ganze als Name=Value (Dateiname=Größe) speicherst.

Delphi-Quellcode:
DeineList.Values[DeinDateiname]);
gibt Dir die (in diesem Fall) Größe der ersten gefundenen Datei mit diesem Namen.

Eine Suche über Angabe der Größe funktioniert so natürlich nicht; wurde aber auch nicht nach gefragt ;)

Weazy 12. Jan 2009 15:49

Re: Hashmap oder ähnlich...
 
Was genau meinst du mit Name=Value (Dateiname=Größe)?

worker 12. Jan 2009 15:57

Re: Hashmap oder ähnlich...
 
Prinzipiell kannst Du die Daten in Deiner Stringliste speichern, wie Du lustig bist.
Wenn man aber Daten hat, wie es nun bei Dir der Fall ist, eine Eigenschaft A (hier der Dateiname), der eine Eigenschaft B (hier die Dateigröße) zugeordnet ist, dann bieten die Listen an, diese Daten im Format Name=Wert zu speichern. Und diese Speicherung ermöglicht dann das schnelle Suchen nach diesen Daten.

Füge einfach Deine Datensätze mit der Add-Methode zu Deiner Liste hinzu, bspw. so:
Delphi-Quellcode:
DeineListe.Add(Format('%s=%d', [Dateiname, Dateigröße]));
Würdest Du Dir diese Liste dann in eine Datei schreiben sähe das Ganze so aus:

Dateiname=Dateigröße

also z.B.:
Datei1=243
Datei2=512
Datei3=98

Möchtest Du nun die Größe von Datei2 haben, fragst Du einfach ab mittels
Delphi-Quellcode:
DeineListe.Values['Datei2']);
Das Ergebnis wäre in diesem Fall 512.

DU kannst Dir auch mal den TValueListEditor anschauen - der visualisiert so etwas.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf