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 3 von 3     123   
Benutzerbild von jaenicke
jaenicke

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

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

  Alt 31. Jul 2012, 12:23
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
tgvoelker

Registriert seit: 9. Sep 2002
Ort: Oelsnitz, Vogtland
39 Beiträge
 
Delphi 2009 Professional
 
#22

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

  Alt 31. Jul 2012, 12:35
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.
Thomas Völker
  Mit Zitat antworten Zitat
Pow3rus3r

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

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
Benutzerbild von jaenicke
jaenicke

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

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

  Alt 31. Jul 2012, 13:01
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;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
529 Beiträge
 
Delphi 11 Alexandria
 
#25

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

  Alt 31. Jul 2012, 17:30
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.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Pow3rus3r

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

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

  Alt 1. Aug 2012, 10:01
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#27

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

  Alt 1. Aug 2012, 10:06
Tabelle := TDictionary.create(); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Pow3rus3r

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

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

  Alt 1. Aug 2012, 11:18
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?
  Mit Zitat antworten Zitat
Pow3rus3r

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

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

  Alt 1. Aug 2012, 11:34
mit TDictionary<string, T_Kennung>.create hats dann endlich geklappt Funktioniert so, wie es sollte. Danke!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 09:14 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