Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal Assoziative Arrays (https://www.delphipraxis.net/152262-assoziative-arrays.html)

Deltachaos 16. Jun 2010 19:13

Delphi-Version: 2010

Assoziative Arrays
 
Hi,

Ich suche eine Möglichkeit ein Assoziative Arrays zu nutzen.
Ich habe jetzt schon von die Folgende Möglichkeit gefunden:

Delphi-Quellcode:
type
  SomeClass = class
  public
    function GetArrayProp(Index: string): string;
    procedure SetArrayProp(Index: string; Value: string);
    property ArrayProp[Index: string]: string read GetArrayProp write SetArrayProp;
die Frage ist wie organisiere ich das intern am besten. Das Problem ist das in meinem Fall ständig werte dazukommen und wieder gelöscht auf nil gesetzt werden.

ich brauchte in meiner Anwendung folgende Struktur:

Clients[34] := TClient...
Clients[234] := TClient...
Clients[12] := TClient...
User['deltachaos'][0] := 34;
User['deltachaos'][1] := 234;
User['deltachaos'][2] := 12;

himitsu 16. Jun 2010 19:23

AW: Assoziative Arrays
 
Hast du dich schonmal hier umgesehn?
Da gibt es schon einige Beispiele, wo man abgucken könnte. :zwinker:
> Hier im Forum suchenassoziative Arrays oder Hier im Forum suchenassoziatives Array


Ohne Generics läuft es und für dich dann datürlich noch den Record in eine Klasse umgewandelt:
http://www.delphipraxis.net/132817-u...ler-e2506.html

Ach ja, die Speicherverwalrung ist extra nicht stark optimiert,
da dieses bei mir der "neue" Delphi-SpeicherManager schon ausreichend erledigt.
Also entweder man optimiert das selber oder rüstet ebenso mit FastMM nach.


PS:
Delphi-Quellcode:
SomeClass = class
public
  function GetArrayProp(Index: string): string;
  procedure SetArrayProp(Index: string; Value: string);
  property ArrayProp[Index: string]: string read GetArrayProp write SetArrayProp;
Sowas "Einfaches", also ein assoziatives Array of String, könnte man auch über eine StringList erledigen.
Delphi-Quellcode:
SL.Value['name'] = 'text'

Deltachaos 16. Jun 2010 19:45

AW: Assoziative Arrays
 
Doch das schon.

Nur häufen sich bei mir noch ein paar andere Probleme. Ich nutze zum einen FreePascal da es eine Server Anwendung ist die auf einem Linux Server laufen muss. Zum anderen weiß ich noch nicht mal genau wie ich die Speicherung der Clients überhaupt mache bzw. ob es einfacher geht.
Da ich das gerade bemerkt habe habe ich auch einen anderen Thread aufgemacht:

http://www.delphipraxis.net/152264-s...anwendung.html

himitsu 16. Jun 2010 20:18

AW: Assoziative Arrays
 
(@mkinzler: ich mach mal hier weiter)
Zitat:

Zitat von mkinzler (Beitrag 1029471)
Vielleicht reicht ja eine ValueList?

Meinst du den TValueListEditor?

Darin versteckt sich ein kompletter TStringGrid.


Eine TStringList (wie oben erwähnt) wäre aber sowas wie eine ValueList.


Also im FPC/Lazarus dürfte die Record-Variante laufen ... und falls die Generics da auch nicht gehn oder sie nicht nötig sind, dann einfach den generischen Typen direkt durch deinen Wunschtypen ersetzen.

Wenn man Record in Class ändert, dann hat man eine Klasse draus gemacht.

Dann eventuell noch den eingebetteten Typen rausverlegen.

Nach all diesen Änderungen könnte es eventuell sogar in Delphi 7 laufen.

Ob Speicheroptimierungen nötig sind, das hängt davon ab, wie oft das Array verändert (gelöscht/hinzugefügt) wird und ob es nicht doch schon schnell genug ist.

[add]
Und hier noch ein kleiner Thread dazu
http://www.delphipraxis.net/145892-g...rs-record.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 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