AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

Ein Thema von Popov · begonnen am 7. Mai 2009 · letzter Beitrag vom 10. Mai 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Popov
(Gast)

n/a Beiträge
 
#1

Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 15:40
Mit Low und High kann man die Grenzen von Arrys ermitteln. Beim Code

Delphi-Quellcode:
var
  a: array[1..100] of Byte;
  i: Integer;
begin
  i := High(a);
erhalte ich bei i 100 als obere Grenze. Soweit alles klar. Nur wie, bzw. überhaupt, kriegt man bei mehrdimensionaler Arrays die Info für die weitere Dimension?

Delphi-Quellcode:
var
  a: array[1..100, 10..10000] of Byte;
  i: Integer;
begin
  i := High(a);
Hier erhalte ich nur den oberen Wert der ersten Dimension, also 100, ich brauche aber den zweiten Wert.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 15:41
Wie wäre es damit?
  j := High(a[0]);
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 15:55
Also High(a[0]) funktioniert bei mir nicht (D3 und D7), aber High(a[1]) gibt die Grenze der zweiten Dimension. Allerdings gibt auch High(a[20]) die Grenze der zweiten Dimension.

Gibt es da eine Logik oder funktioniert es zufällig? Denn

Delphi-Quellcode:
var
  a: array[1..100, 10..10000, 0..10] of Byte;
  i: Integer;
begin
  i := High(a[2]);
gibt nicht die dritte Dimension zurück, sondern immer noch der zweiten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 16:02
vielleicht fällt es so besser auf:
Delphi-Quellcode:
i := High(a[Low(a)]); // Obergrenze des Unterarray vom 1. Array der obersten Ebene
i := Low(a[Low(a)]); // Untergrenze des Unterarray vom 1. Array der obersten Ebene
Delphi-Quellcode:
var a: array[1..100, 10..10000] of Byte;
i := High(a[Low(a)]);
i := High(a[1]); // oder direkt
i := High(a[99]); // 1..100 ... was ist egal, da alle Unterarrays gleich groß sind

var a: array[1..100, 10..10000, 0..10] of Byte;
i := High(a[Low(a), Low(a[Low(a)])]);
i := High(a[Low(a)][Low(a[Low(a)])]);
i := High(a[1][10]); // oder direkt
i := High(a[1, 10]);
i := High(a[99][9999]); // 1..100 > 10..10000 ... was ist hier ebenfalls egal
i := High(a[99, 9999]);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 16:04
Hallo,

vielleicht wird es auch klarer, wenn man die Array-Deklaration so schreibt:

Delphi-Quellcode:
var
  a: array [1..100] of array [10..10000] of array [0..10] of Byte;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 16:06
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  a: array[1..100, 10..10000, 0..10] of Byte;
begin
  ShowMessage(Format('[%d..%d,%d..%d,%d..%d]',[Low(a),
                                               High(a),
                                               Low(a[Low(a)]),
                                               High(a[Low(a)]),
                                               Low(a[Low(a),Low(a[Low(a)])]),
                                               High(a[Low(a),Low(a[Low(a)])])]));
end;
Je mehr Dimensionen, desto komplizierter. Aber vielleicht hab ich auch nur ein Brett vor dem Kopf und es geht auch einfacher.

[edit] in der Art hatte das himitsu ja bereits gepostet [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#7

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 16:08
Oder anders ausgedrückt:
Es wird immer die Obergrenze des nächstfolgenden Sub-Arrays ermittelt.

Delphi-Quellcode:
var a : Array [1..10,1..100,1..1000] of integer;

procedure TfoTest19.FormShow(Sender:TObject);
begin
  listbox1.Items.add(inttostr(high(a) ));
  listbox1.Items.add(inttostr(high(a[1]) ));
  listbox1.Items.add(inttostr(high(a[1,1])));
end;
Ralph
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 16:22
Ok, alles klar, hab es jetzt verstanden.

Danke an alle
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#9

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 17:02
Eine brutale Möglichkeit, die Größe(n) eines dynamisch mehrdimensionalen Arrays zu messen, wäre folgender:

Delphi-Quellcode:
function CntArrDimensions( const Arr: Pointer ): String;
begin
  try
    Result := '0..' + IntToStr( pCardinal( Cardinal(Arr^) - 4 )^ - 1 ) + ' ' + CntArrDimensions( Pointer( Cardinal(Arr^) ) );
  except
  end;
end;

// Testaufruf
var
  Test: Array of Array of Array of Byte;
begin
  SetLength( Test, 10, 20, 30 );
  ShowMessage( CntArrDimensions( @Test ) );
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#10

Re: Wie ermittelt man die Grenzen mehrdimensionaler Arrays?

  Alt 7. Mai 2009, 17:05
Ay Caramba..

Aber was soll denn der überflüssige Try..Except - Block da drin?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23: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