AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array über mit String als "Index"?

Ein Thema von Pow3rus3r · begonnen am 30. Jul 2012 · letzter Beitrag vom 1. Aug 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

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

  Alt 30. Jul 2012, 13:16
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Pow3rus3r

Registriert seit: 17. Apr 2012
43 Beiträge
 
Delphi XE Professional
 
#2

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

  Alt 30. Jul 2012, 14:06
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?
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

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

  Alt 30. Jul 2012, 14:12
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

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

  Alt 30. Jul 2012, 14:17
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Pow3rus3r

Registriert seit: 17. Apr 2012
43 Beiträge
 
Delphi XE Professional
 
#5

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

  Alt 30. Jul 2012, 14:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

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

  Alt 30. Jul 2012, 14:43
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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

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

  Alt 30. Jul 2012, 15:14
Die Daten bestehen aus:
1.) Datensatzname
2.) 16 einzelnen Hexadezimalzahlen, die auch einzeln ansprechbar sein müssen
Was heißt einzeln ansprechbar?

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.366 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 30. Jul 2012, 15:53
Die Daten bestehen aus:
1.) Datensatzname
2.) 16 einzelnen Hexadezimalzahlen, die auch einzeln ansprechbar sein müssen
Da ist ein TObjectDictionary mit einem String und einer Klasse darin am besten. Denn dann kannst du entweder nur einen einzelnen Wert ansprechen, klar, oder aber auch die Daten zu einem Datensatz einmal suchen und dann alle Werte dazu benutzen ohne erneut zu suchen.

Wobei bei der geringen Anzahl der Datensätze die Frage ist, ob man da nicht noch anders herangehen kann. Aber dafür fehlen detailliertere Informationen wie (und wie oft) auf die Daten zugegriffen wird.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.047 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 30. Jul 2012, 23:09
Die Daten bestehen aus:
1.) Datensatzname
2.) 16 einzelnen Hexadezimalzahlen, die auch einzeln ansprechbar sein müssen
Dann sähe die Deklaration etwas so aus:

Delphi-Quellcode:
type
  TDatensatz = array[0..15] of Integer; // oder auch 1..16, Byte, Word, String oder was auch immer

var
  Datenbank: TDictionary<string, TDatensatz>;

var
  gibHer: Integer;

begin
  // Zugriff auf Zeile "Name1", Wert 5
  gibHer := Datenbank['name1'][5];
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Pow3rus3r

Registriert seit: 17. Apr 2012
43 Beiträge
 
Delphi XE Professional
 
#10

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

  Alt 31. Jul 2012, 12:43
Dann sähe die Deklaration etwas so aus:

Delphi-Quellcode:
type
  TDatensatz = array[0..15] of Integer; // oder auch 1..16, Byte, Word, String oder was auch immer

var
  Datenbank: TDictionary<string, TDatensatz>;

var
  gibHer: Integer;

begin
  // Zugriff auf Zeile "Name1", Wert 5
  gibHer := Datenbank['name1'][5];
end;
Danke, das wäre genau das, was ich brauche. Leider habe ich Probleme beim füllen des Arrays und bekomme beim kompilieren immer den Fehler, dass die Typen für TDatensatz nicht zum Datentyp Array passt.

Ich versuche daas Dictionary gerade so zu füllen:
Datenbank.Add('Name1', 12,13,14,16);

kann ich das Dictionary so (oder so in der Art) füllen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
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