Delphi-PRAXiS
Seite 3 von 3     123   

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)

jaenicke 31. Jul 2012 12:23

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.

tgvoelker 31. Jul 2012 12:35

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.

Pow3rus3r 31. Jul 2012 12:43

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

Zitat von Uwe Raabe (Beitrag 1176380)
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?

jaenicke 31. Jul 2012 13:01

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;

Neumann 31. Jul 2012 17:30

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.

Pow3rus3r 1. Aug 2012 10:01

AW: Array über mit String als "Index"?
 
Ich verzweifele gerade bei dem Versuch, die Lösung von Uwe Raabe zu füllen
Delphi-Quellcode:
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;
Beim Ausführen der Zeilen zwischen "begin" und "end" bekomme ich immer eine Zugriffsverletzung beim lesen von Adresse 0000000C

Klaus01 1. Aug 2012 10:06

AW: Array über mit String als "Index"?
 
Delphi-Quellcode:
Tabelle := TDictionary.create();
Grüße
Klaus

Pow3rus3r 1. Aug 2012 11:18

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

Zitat von Klaus01 (Beitrag 1176536)
Delphi-Quellcode:
Tabelle := TDictionary.create();
Grüße
Klaus

TDictionary: Undeklarierter Bezeichner.


Ich habe die "Generics.Collections" jedoch bei "uses" eingebunden. Habe ich evtl. noch irgendwas übersehen/vergessen?

Pow3rus3r 1. Aug 2012 11:34

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.
Seite 3 von 3     123   

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