AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Array mit zur Designzeit unbekannten Dimensionen
Thema durchsuchen
Ansicht
Themen-Optionen

Array mit zur Designzeit unbekannten Dimensionen

Ein Thema von DevilsCamp · begonnen am 13. Jun 2006 · letzter Beitrag vom 13. Jun 2006
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Array mit zur Designzeit unbekannten Dimensionen

  Alt 13. Jun 2006, 08:23
Gibt es ein Möglichkeit, die Dimensionen eines Arrays zur Laufzeit anzugeben?

Delphi-Quellcode:
var
  ar : array of Integer;
  br : array of array of Integer
gibt mir ja nur ein ein-Dimensionales (ar) bzw. zwei-Dimensionales (br) Array.

Doch ich bräuchte ein Array, bei dem erst zur Laufzeit bekannt wird, wieviele Dimensionen es besitzen wird.
Gibt es da eine Möglichkeit bzw. kennt jemand eine Klasse, die mir sowas zur Verfügung stellt?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Array mit zur Designzeit unbekannten Dimensionen

  Alt 13. Jun 2006, 08:25
Wäre mir nicht bekannt. könntest es aber mit Listen realisieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Array mit zur Designzeit unbekannten Dimensionen

  Alt 13. Jun 2006, 09:40
Hallo,

versuch es doch mal mit Variant-Arrays:
Zitat von Delphi-Hilfe:
Delphi-Quellcode:
var
  A: Variant;
begin
  A := VarArrayCreate([0, 4], varVariant);
  A[0] := 1;
  A[1] := 1234.5678;
  A[2] := 'Hello world';
  A[3] := True;
  A[4] := VarArrayOf([1, 10, 100, 1000]);
  WriteLn(A[2]);   { Hello world }
  WriteLn(A[4][2]);   { 100 }

end;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Array mit zur Designzeit unbekannten Dimensionen

  Alt 13. Jun 2006, 10:32
Hallo Marc,

wenn es unbedingt arrays sein müssen, dann hilft in der Regel eine Adressumsetzung. Dabei wird mit den zur Laufzeit festgelegten Dimensionen auf ein eindimensionales Array zugegriffen:

Delphi-Quellcode:
var
  ida: array of Integer;
  dims: array of Integer;

function IntProduct(n: array of Integer): Integer;
var
  i: Integer;
begin
  if Length(n) > 0 then
  begin
    Result := n[0];
    for i := 1 to High(n) do
      Result := Result * n[i];
  end else Result := 0;
end;

function FlatIndex(const dims, idx: array of Integer): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := Low(idx) to High(idx) do
    Result := Result * dims[i] + idx[i];
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  i, j, k: Integer;
begin
  SetLength(dims, 3);
  dims[0] := 4;
  dims[1] := 6;
  dims[2] := 3;
  SetLength(ida, IntProduct(dims));
  for i := 0 to 3 do
    for j := 0 to 5 do
      for k := 0 to 2 do
        ListBox.Items.Add(IntToStr(FlatIndex(dims, [i, j, k])));
end;
Plausibilitätsprüfungen musst du noch einbauen.

Grüße vom marabu
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#5

Re: Array mit zur Designzeit unbekannten Dimensionen

  Alt 13. Jun 2006, 11:46
@marabu:
Danke, das werde ich mir mal merken.

Allerdings nutzt mir das bei meinem jetzigen Projekt leider nichts, da die Größe einer Dimension erst bestimmt werden kann, wenn die Dimension vorher erst berechnet wurde.

Aber ich habe mein Problem jetzt mit Hilfe des VirtualStringTrees gelöst.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:48 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