![]() |
Assoziatives Array oder ähnliches
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?¿ |
Re: Assoziatives Array oder ähnliches
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 |
Re: Assoziatives Array oder ähnliches
Hallo,
ich kenn nur den KEY. Nur mit diesem möchte ich ans VALUE kommen. |
Re: Assoziatives Array oder ähnliches
Aha, nun wird deine Frage genauer, den unter assoziativen Arrays verstehe ich was ganz anderes.
Entweder definierst du deine Datenstrukturen um in
Delphi-Quellcode:
Und speicherst somit im Array beide zusammengehörigen Werte ab. Du musst dann nur noch den Key im Array suchen und hast die Value.
type
TKeyValue = packed record Key: TKey; Value: TValue; end; TKeyValueArray = array of TKeyValue; 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. |
Re: Assoziatives Array oder ähnliches
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. |
Re: Assoziatives Array oder ähnliches
Achso, falls das nicht klar geworden ist:
Ich habe zwei Arrays entstanden aus
Delphi-Quellcode:
Wobei das _myFields sieht so das, dass ich da immer _myFields[key].name angeben muss um an den Namen zu kommen.
_myRow := mysql_fetch_row(_myRes);
_myFields := mysql_fetch_fields(_myRes); 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 |
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:
So kannst du dann den Rückgabewert von GetValue zum Key als deinen Value verarbeiten.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; Gruß oki |
Hi, irgentwie ist mein Edit-Key nicht zu sehen.
Da war ein Schreibfehler! in der Function GetValue muß es für
Delphi-Quellcode:
so sein
PValue := PChar(Object[Index]);
Delphi-Quellcode:
Gruß oki
PValue := PChar(Objects[Index]);
|
Re: Assoziatives Array oder ähnliches
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. |
Re: Assoziatives Array oder ähnliches
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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 by Thomas Breitkreuz