AGB  ·  Datenschutz  ·  Impressum  







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

Assoziatives Array oder ähnliches

Ein Thema von sentinal · begonnen am 22. Okt 2003 · letzter Beitrag vom 23. Okt 2003
Antwort Antwort
Seite 1 von 3  1 23      
sentinal

Registriert seit: 9. Okt 2003
27 Beiträge
 
#1

Assoziatives Array oder ähnliches

  Alt 22. Okt 2003, 21:31
Hallo,
ich bin auf der vergeblichen Suche nach einem assoziativen Array für Delphi.
Bin ich einfach nur Blind oder gibt es das nicht?¿
Gibt es eine andere Möglichkeit so etwas variabel zu erstellen?¿
Habe die zwei numerische Arrays und möchte diese irgendwie verknüpfen:

[0] = value1
[1] = value2
...

[0] = key1
[1] = key2

Nun möchte ich sagen könne gib mir value von key1 und er soll value1 ausspucken.

Hat da einer eine Idee?¿
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Assoziatives Array oder ähnliches

  Alt 23. Okt 2003, 00:47
Hä?
KeyArray[0] = Key1 somit ValueArray{0] = Value1, demzufolge KeyArray[1] = Key2 und ValueArray[1] = Value2, sprich KeyArray[x] = Key_X und ValueArray[x] = Value_X.

Gruß Hagen
  Mit Zitat antworten Zitat
sentinal

Registriert seit: 9. Okt 2003
27 Beiträge
 
#3

Re: Assoziatives Array oder ähnliches

  Alt 23. Okt 2003, 00:55
Hallo,
ich kenn nur den KEY. Nur mit diesem möchte ich ans VALUE kommen.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: Assoziatives Array oder ähnliches

  Alt 23. Okt 2003, 01:03
Aha, nun wird deine Frage genauer, den unter assoziativen Arrays verstehe ich was ganz anderes.

Entweder definierst du deine Datenstrukturen um in
Delphi-Quellcode:
type
  TKeyValue = packed record
    Key: TKey;
    Value: TValue;
  end;

  TKeyValueArray = array of TKeyValue;
Und speicherst somit im Array beide zusammengehörigen Werte ab. Du musst dann nur noch den Key im Array suchen und hast die Value.

Oder du benutzt zwei getrennte Arrays für Key und Value, musst zuerst den Index des Keys finden und benutzt diesen um in das parallele Array der Values zuzugreifen.

Jetzt stellt sich die Frage wie der Key definiert ist. Ist er z.B. ein Integer zwischen 0..1023 und zu jedem dieser 1024 Keys gibt es auch einen Key, dann könnte man den Key als Index in das Value Array selber benutzen.

D.h. die Struktur wie ein Key aussieht und wieviele Keys es gibt entscheidet darüber was am besten geeignetesten ist. Also wie sehen die Keys/Values denn nun aus ?

Gruß Hagen

PS: am besten ist es immer wenn man in seiner Frage beschreibt was man machen will und wofür es sein soll.
  Mit Zitat antworten Zitat
sentinal

Registriert seit: 9. Okt 2003
27 Beiträge
 
#5

Re: Assoziatives Array oder ähnliches

  Alt 23. Okt 2003, 11:38
Hallo,

ich würde da gerne die Datenbankergebnisse leichtzer mit abfragen.
Weil wenn ich immer durchzählen muss das wievielte Feld nun die id ist oder die email dann bringt mich das um.

Die Keys sind also Strings.
Die Values sind auch Strings.

nun wenn ich mir eine Funktion schreiben muss die immer erst das Element mit dem Wert 'Key' sucht und dann mit dem Key von dem Element aus dem anderen Array das raussuchen muss, ist das doch auf dauer glaube nicht sehr toll im Bezug auf genutzte Leistung zu Ergebnis, oder?
Darum habe ich gehofft, dass man es direkt zuweisen kann.
  Mit Zitat antworten Zitat
sentinal

Registriert seit: 9. Okt 2003
27 Beiträge
 
#6

Re: Assoziatives Array oder ähnliches

  Alt 23. Okt 2003, 11:45
Achso, falls das nicht klar geworden ist:

Ich habe zwei Arrays entstanden aus
Delphi-Quellcode:
_myRow := mysql_fetch_row(_myRes);
_myFields := mysql_fetch_fields(_myRes);
Wobei das _myFields sieht so das, dass ich da immer _myFields[key].name angeben muss um an den Namen zu kommen.
Bei _myRow geht es direkt _myRow[key] und habe hier das Value.

nun hätt ich das gerne irgendwie so oder ähnlich verknüpft:

_myErgebnis[_myFields[key]] := _myRow[key];

So dass ich nurnoch
_myErgebnis['id'] angeben muss
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7
  Alt 23. Okt 2003, 12:05
Hi Sentinal,

du kannst natürlich ein zweidimensionales Array (möglichst dynamisch) oder auch eine Stringliste verwenden.

Bei der Stringliste hast du natürlich das Problem, dass dein zweiter zuspeichernder Wert ein Typ TObject sein muß. Das kannst du aber einfach mit einer Zeigervariable lösen.

Üblicherweise schreibe ich mir für sowas eine kleine neue Klasse abgeleitet von TStringList um die Umwandlung in deinen Value-Wert nicht in der "Hauptanwendung" machen zu müssen.

Das sieht dann ansatzweise so aus:

Delphi-Quellcode:

type
  TKeyValueList = class(TStringList)
  public
    procedure AddKeyValue(Key, Value: String);
    function GetValue(Key : String) : String;
end;

procedure TKeyValueList.AddKeyValue(Key, Value:String);
var
  PValue : PChar;
begin
  // Value in PChar wandeln
  AddObjects(Key, TObject(PValue));
end;

function TKeyValueList .GetValue(Key, String):String;
var
  PValue : PChar;
  Index : Integer;
begin
  Result := '';
  try
    IF Find(Key, Index) then begin
   PValue := PChar(Object[Index]);
      // PValue in String und Result zuweisen
      end;
  except end;
end;
So kannst du dann den Rückgabewert von GetValue zum Key als deinen Value verarbeiten.

Gruß oki
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8
  Alt 23. Okt 2003, 12:08
Hi, irgentwie ist mein Edit-Key nicht zu sehen.

Da war ein Schreibfehler!

in der Function GetValue muß es für
   PValue := PChar(Object[Index]); so sein
   PValue := PChar(Objects[Index]); Gruß oki
  Mit Zitat antworten Zitat
sentinal

Registriert seit: 9. Okt 2003
27 Beiträge
 
#9

Re: Assoziatives Array oder ähnliches

  Alt 23. Okt 2003, 12:30
Hallo,
werd ich dann wohl irgendwie so machen müssen, weil es ja anscheinend nichts direkters in Delphi gibt.

Ich sage mal Danke und werde dieses Thema als beantwortet markieren.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Assoziatives Array oder ähnliches

  Alt 23. Okt 2003, 13:12
Da sowohl Key als auch Value vom Typ String sind kannst du einfach eine Stringliste verwenden.

Code:
var
  KeyValue : TStrings;
  erg : String;
 
begin
  //Stringlist erstellen und Key/Value durch ein = trennen;
  KeyValue := TStringlist.create;
  keyvalue.NameValueSeperator := '=';
 
  //Befüllen
  keyvalue.append(key+'='+value);

  //Suchen mit key
  erg := keyvalue.Value[Key];

  //Irgendwann wenns nimmer gebraucht wird freigeben
  KeyValue.free;
end;
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 17:42 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