Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array über mit String als "Index"? (https://www.delphipraxis.net/169577-array-ueber-mit-string-als-index.html)

Pow3rus3r 30. Jul 2012 12:01

Array über mit String als "Index"?
 
hallo zusammen,

ich habe eine große Menge Daten, die ich in ein Array laden will, was z.B. so aussieht:

[0]: Name1, 5, 18, 24, 58
[1]: Name2, 4, 32, 55, 23
...

Dabei sind mir die "Namen" jederzeit bekannt und ich würde das Array gerne über die Datensatznamen ansprechen. normal muss ja immer die Zeilennummer des Array angegeben werden. Gibt es da evtl. eine Möglichkeit, das ganze ohne eine Schleife o.ä. zu realisieren?

Danke und Gruß
Thomas

Bernhard Geyer 30. Jul 2012 12:08

AW: Array über mit String als "Index"?
 
Schau dir mal das Values-Property von TStrings an.

Uwe Raabe 30. Jul 2012 12:56

AW: Array über mit String als "Index"?
 
TDictionary wäre auch eine Alternative.

s.h.a.r.k 30. Jul 2012 13:16

AW: Array über mit String als "Index"?
 
Himitsu hatte ein Hier im Forum suchenassoziatives Array glaub schon mal sowas geschrieben... Irgendwie über einen Record, soweit ich das weiß... Nur finde ich es gerade nicht.

Würde aber auch ein TDictionary empfehlen, nachdem du schon XE hast.

Pow3rus3r 30. Jul 2012 14:06

AW: Array über mit String als "Index"?
 
Mit Tstrings und TDictionary kann man aber nur einem String genau EINEN anderen Sting zuordnen, oder habe ich da jetzt was falsch verstanden?

Ich bräuchte irgendwie sowas, wie eine Datenbank, bei der ich sagen kann, ich will den gesamten Datensatz (bestehend aus mehreren Datenfeldern) mit dem namen "xy".

Alternativ könnte ich wohl einfach die Datensätze (also die Zahlen) in ein Array laden und dann TDictionary oder Tstrings nutzen, um den ID's des Arrays die Namen zuzuordnen. Wäre zwar etwas umständlich, aber wie es scheint die einzige Möglichkeit, oder?

alleinherrscher 30. Jul 2012 14:12

AW: Array über mit String als "Index"?
 
Und wenn du ein Array of Record machst und dir eine Suchfunktion schreibst, die aus dem Namen den Array-Index sucht. Dann kannst du immer auf den kompletten Datensatz zugreifen. Ist perfomancetechnisch vielleicht nicht das allerschnellste, aber müsste ausreichend sein.

Gruß, Michael

p80286 30. Jul 2012 14:17

AW: Array über mit String als "Index"?
 
vielleicht wäre es gut wenn Du Deine Daten etwas näher beschreiben würdest.
Schon it einer Stringlist und binärer Suche hättest Du eine recht schnelle Möglichkeit für
Code:
name1 = 1 2 3 4 55 66 77
name2 = 1234 34 12342 2 77
name3 = irgendeinwert
Tdictonary kenn ich nicht aber vom Hörensagen ist das a) schneller b) einfacher zu handhaben.

Gruß
k-H

Pow3rus3r 30. Jul 2012 14:37

AW: Array über mit String als "Index"?
 
Die Daten bestehen aus:
1.) Datensatzname
2.) 16 einzelnen Hexadezimalzahlen, die auch einzeln ansprechbar sein müssen

Bisher hatte ich alles in einem Array und dann mit einer Schleife nach dem gewünschten Datensatznamen gesucht. Aber das ist bei der Anzahl von Daten (ca. 400 Datensätze) schon recht Zeitintensiv.

jfheins 30. Jul 2012 14:43

AW: Array über mit String als "Index"?
 
Du kannst sowas:
Delphi-Quellcode:
record
  Name: String;
  Values: Array of Byte;
end;
in ein Array packen und dafür sorgen dass dieses sortiert ist und bleibt. Dann kannst du eine binäre Suche benutzen.

Zitat:

Zitat von Pow3rus3r (Beitrag 1176316)
Mit Tstrings und TDictionary kann man aber nur einem String genau EINEN anderen Sting zuordnen, oder habe ich da jetzt was falsch verstanden?

Du kannst deine ganzen Wert auch in eine Containerklasse packen, dann reicht das vollkommen.

p80286 30. Jul 2012 15:14

AW: Array über mit String als "Index"?
 
Zitat:

Zitat von Pow3rus3r (Beitrag 1176324)
Die Daten bestehen aus:
1.) Datensatzname
2.) 16 einzelnen Hexadezimalzahlen, die auch einzeln ansprechbar sein müssen

Was heißt einzeln ansprechbar?

Zitat:

Zitat von Pow3rus3r (Beitrag 1176324)
Bisher hatte ich alles in einem Array und dann mit einer Schleife nach dem gewünschten Datensatznamen gesucht. Aber das ist bei der Anzahl von Daten (ca. 400 Datensätze) schon recht Zeitintensiv.

wie denn das? 400 Datensätze waren für W95 vielleicht eine Herausforderung, mit einem halbwegs modernem Equipment ist das doch ruck zuck erledigt!?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr.
Seite 1 von 3  1 23      

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