![]() |
AW: Array über mit String als "Index"?
Ich finde das passt genau. Eine TStringList ist für den Zweck sowohl beim Programmieren als auch zur Laufzeit langsamer (je nach Anwendung drastisch) und dazu noch umständlicher zu verwenden. Da holperts eben etwas.
|
AW: Array über mit String als "Index"?
Entschuldige, habe nochmal editiert, um zu präzisieren.
Ich habe nur einen einzigen Anwendungsfall, der auf den ersten Blick mit einem Dictionary einfacher lösbar ist, als mit einer TStringList - und das ist eine Optimierung, die ohne Anzeige abläuft und wo nur das ergebnis ausgegeben wird. |
AW: Array über mit String als "Index"?
Zitat:
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? |
AW: Array über mit String als "Index"?
Mal ein Beispiel (ohne Prüfung, ob der Wert existiert usw.):
Delphi-Quellcode:
type
TExampleData = class Values: array of Integer; constructor Create(const AValues: array of Integer); end; // ... constructor TExampleData.Create(const AValues: array of Integer); var i: Integer; begin SetLength(Values, Length(AValues)); for i := Low(AValues) to High(AValues) do Values[i] := AValues[i]; end; // Verwendung: var Demo: TObjectDictionary<string, TExampleData>; CurrentValue: Integer; CurrentData: TExampleData; begin Demo := TObjectDictionary<string, TExampleData>.Create([doOwnsValues]); try Demo.Add('Test', TExampleData.Create([1, 3, 4, 7])); // einfachen Wert lesen ShowMessage(IntToStr(Demo['Test'].Values[1])); // alle Werte durchgehen for CurrentValue in Demo['Test'].Values do ShowMessage(IntToStr(CurrentValue)); // mehrere Werte zu einem Key lesen CurrentData := Demo['Test']; ShowMessage(IntToStr(CurrentData.Values[1])); ShowMessage(IntToStr(CurrentData.Values[2])); finally Demo.Free; end; end; |
AW: Array über mit String als "Index"?
Warum nicht ein Clientdataset für solche Dinge nehmen? Lässt sich nach jedem Feld sortieren, man kann mit Locate einen Wert suchen, in einem DBGrid darstellen, Laden und Speichern.
|
AW: Array über mit String als "Index"?
Ich verzweifele gerade bei dem Versuch, die Lösung von Uwe Raabe zu füllen
Delphi-Quellcode:
Beim Ausführen der Zeilen zwischen "begin" und "end" bekomme ich immer eine Zugriffsverletzung beim lesen von Adresse 0000000C
type
T_Kennung = array[0..16] of string; public Tabelle: TDictionary<string, T_Kennung>; const Daten: T_Kennung = ('Name1','0x01','0x02','0x03','0x04','0x05','0x06','0x07','0x08','0x09','0x10','0x11','0x12','0x13','0x14','0x15','0x16'); begin Tabelle.Create; Tabelle.Add('Name1', Daten); showmessage (Tabelle['Name'][1]); end; |
AW: Array über mit String als "Index"?
Delphi-Quellcode:
Grüße
Tabelle := TDictionary.create();
Klaus |
AW: Array über mit String als "Index"?
Zitat:
Ich habe die "Generics.Collections" jedoch bei "uses" eingebunden. Habe ich evtl. noch irgendwas übersehen/vergessen? |
AW: Array über mit String als "Index"?
mit TDictionary<string, T_Kennung>.create hats dann endlich geklappt :) Funktioniert so, wie es sollte. Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:26 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-2025 by Thomas Breitkreuz