Delphi-PRAXiS

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

faux 1. Mai 2004 11:03


Assoziative Arrays
 
Hallo,

gibz in Delphi eigentlich Assoziative Arrays so wie in PHP?
Code:
$person = array(
  name => "faux",
  swapit => 730);
also ich mach das immer so zb:

Delphi-Quellcode:
type
  TPerson = (name, swapit);
var
  Person: array [name..swapit] of TPersion;

begin
  Person[name] := 'faux';
  Person[swapit] := 730;
end.
geht das auch anders?

himitsu 1. Mai 2004 11:10

Re: Assoziative Arrays
 
In Delphi selbst gibt es sowas nicht.

Aber wenn du mal diese super DP-Suchfunktion verwendesst...

Hier im Forum suchenAssoziative Arrays

Jens Schumann 1. Mai 2004 11:15

Re: Assoziative Arrays
 
Hallo,
grundsätzlich würde ich es so lösen
Delphi-Quellcode:
unit Unit2;

interface

uses SysUtils, classes;

Type

  TArrayItem = class(TObject)
  private
    FName: String;
  public
    property Name : String read FName write FName;
  end;

  TArrayItems = class(TList)
  private
    function GetArrayItem(Name: String): TArrayItem;
  public
    function Add(const Itemname : String) : TArrayItem;
    property ArrayItems[Name : String] : TArrayItem read GetArrayItem;
  end;

implementation

{ TArrayItems }

function TArrayItems.Add(const Itemname: String): TArrayItem;
begin
  Result:=TArrayItem.Create;
  inherited Add(Result);
end;

function TArrayItems.GetArrayItem(Name: String): TArrayItem;
var
  iCnt : Integer;
begin
  Result:=Nil;
  For iCnt:=0 to Count-1 do
    begin
    If AnsiUpperCase(TArrayItem(Items[iCnt]).Name)=AnsiUpperCase(Name) then
      begin
      Result:=Items[iCnt];
      Exit;
      end;
    end;
end;

end.

Robert Marquardt 1. Mai 2004 14:22

Re: Assoziative Arrays
 
Also ich halte eine indexed property fuer ein assoziatives Array.
Schliesslich kann man mit einem beliebigen Typ indizieren.

toms 1. Mai 2004 15:14

Re: Assoziative Arrays
 
oder vielleicht so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  DataField: TStrings;
begin
  DataField := TStringList.Create;
  DataField.Add(Format('%s=%s', ['Jonas', '15.03.1980']));
  ShowMessage(DataField.Values['Jonas'])
  // will print the Birthday of Jonas
  DataField.Free;
end;
gefunden auf http://www.swissdelphicenter.ch/de/showcode.php?id=642

Chewie 1. Mai 2004 15:59

Re: Assoziative Arrays
 
Eine Hash-Version ist auf jeden Fall erheblich performanter. Bei kleinen Arrays ist das vielleicht nicht so wichtig, aber bei mehreren Hundert Datensätzen und häufigen Zugriffen rechnest du dich mit dem Indexing zu tode.

Muetze1 1. Mai 2004 16:06

Re: Assoziative Arrays
 
Moin!

Wie wär's damit?

Delphi-Quellcode:
type
  TPerson = Record
    name : String;
    swapit : Integer;
  End;

var
  Person: array of TPersion;

begin
  Person[0].Name := 'faux';
  Person[0].SwapIt := 730;
end.
MfG
Muetze1

faux 3. Mai 2004 16:17

Re: Assoziative Arrays
 
Zitat:

Zitat von Muetze1
Moin!

Wie wär's damit?

Delphi-Quellcode:
type
  TPerson = Record
    name : String;
    swapit : Integer;
  End;

var
  Person: array of TPersion;

begin
  Person[0].Name := 'faux';
  Person[0].SwapIt := 730;
end.
MfG
Muetze1

dann hab ich 1. mal keinen assoziativen array und zweitens sollte man vorher die länge des dynamischen arrays festlegen (setlength...).


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