Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Low() / High() bei mehrdimensionalen Arrays
Arne - Mo 17.11.08 09:27
Titel: Low() / High() bei mehrdimensionalen Arrays
Moin zusammen,
die Suche hat nix erbracht und die online-Hilfe von D2007 hält sich zu dem Thema bedeckt:
Wie kann ich bei einem mehrdimesionalen Array die Funktionen Low() und High() auf die einzelnen Dimensionen anwenden? Wie sage ich den o.g. Funktionen von welcher Dimension ich gerne die Grenzen haben möchte?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var myIndexX, myIndexY : Integer; myArray : array[0..3, 0..15] of Byte; begin for myIndexX := Low(myArray) to High(myArray) do begin for myIndexY := Low(myArray) to High(myArray) do begin ... end; end; end; |
Wie lasse ich also myIndexX von 0..3 laufen und myIndexY von 0..15? oder geht das mit Low() / High() gar nicht?
thanx, Arne
ene - Mo 17.11.08 09:33
Müsste doch eigentlich so gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var myIndexX, myIndexY : Integer; myArray : array[0..3, 0..15] of Byte; begin for myIndexX := Low(myArray) to High(myArray) do begin for myIndexY := Low(myArray[myIndexX]) to High(myArray[myIndexX]) do begin ... end; end; end; |
BenBE - Mo 17.11.08 14:31
Low \
High arbeiten immer auf dem äußerten Array was ihnen übergeben wird. Somit liefert
High(Arr) die Größe des äußerten Arrays,
High(Arr[0]) die Anzahl der Arrayelemente des Arrays vom 0. Eintrag in
Arr und so weiter.
WENN man rechteckige Arrays hat UND jede Ebene immer gleich viele Einträge hat, kann man statt
MyIndex auch
0 übergeben, was etwas mehr Performance liefert. Ansonsten ist die Lösung von
ene die allgemeingültige.
matze - Mo 17.11.08 18:16
BenBE hat folgendes geschrieben : |
WENN man rechteckige Arrays. |
Mal so am Rande: Was sind denn bitte rechteckige Arrays?
Xentar - Mo 17.11.08 18:38
Ich denke, er meint zweidimensionale, weil die halt "aussehen", wie ein Rechteck.
BenBE - Mo 17.11.08 18:45
matze hat folgendes geschrieben : |
BenBE hat folgendes geschrieben : | WENN man rechteckige Arrays. |
Mal so am Rande: Was sind denn bitte rechteckige Arrays? |
Darf ich ich mit einem Nicht-Rechteckigen Array antworten?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var nonrectangular_array: array of array of Foo; bar: Integer; const baz = 42; begin SetLength(nonrectangular_array, Baz); for Bar := 0 to Baz - 1 do SetLength(nonrectangular_array[Bar], Bar + 1); end; |
Yogu - Mo 17.11.08 19:27
BenBE hat folgendes geschrieben : |
WENN man rechteckige Arrays hat UND jede Ebene immer gleich viele Einträge hat |
Wenn ich das mit rechteckigen Arras jetzt richtig verstanden habe, sind die beiden Bedingungen doch immer gleich - ein rechteckiges Array hat doch
immer in jeder Ebene gleich viele Einträge. :gruebel:
Tilo - Mo 17.11.08 20:07
Der Vorteil von "rechteckigen" Arrays ist das man einmalig low(Array) und high(Array) Variablen zu ordnen kann und dan diese verwenden kann.
Wolle92 - Mo 17.11.08 22:31
Ihr meint quadratisch, nicht rechteckig...
Delphi-Quelltext
1: 2:
| var only_rectangular_array: array [1..10] of array [1..18] of Integer; var quadratic_array: array [1..10] of array [1..10] of Integer; |
Und wenn das zweite der Fall ist, dann kann man halt nur einmal
High(quadratic_array); speichern und damit dann alle ebenen durchgehen...
Rechteck ist vieles...
Quadrat beschränkt sich da schon ziemlich...
BenBE - Mo 17.11.08 22:34
Wolle92 hat folgendes geschrieben : |
Ihr meint quadratisch, nicht rechteckig...
Delphi-Quelltext 1: 2:
| var only_rectangular_array: array [1..10] of array [1..18] of Integer; var quadratic_array: array [1..10] of array [1..10] of Integer; |
Und wenn das zweite der Fall ist, dann kann man halt nur einmal High(quadratic_array); speichern und damit dann alle ebenen durchgehen... |
Ich meine nicht-rechteckig ;-) Um genau zu sein, war mein Array dreieckig ;-)
Wolle92 hat folgendes geschrieben : |
Rechteck ist vieles...
Quadrat beschränkt sich da schon ziemlich... |
Und nicht-rechteckig noch viel mehr ...
ene - Di 18.11.08 08:18
Weil Worte..
alzaimar - Di 18.11.08 08:30
Oder, vom Bauchgefühl her:
Ritter-Sport = Quadratisch
Alpia = Rechteckig
Von ein paar Duplo abgebissen und übereinandergelegt = Nichtgeometrisch
Von ein paar Duplo abgebissen, der Länge nach sortiert und übereinandergelegt = Rautenförmig
usw.
matze - Di 18.11.08 10:06
alzaimar hat folgendes geschrieben : |
Oder, vom Bauchgefühl her:
Ritter-Sport = Quadratisch
Alpia = Rechteckig
Von ein paar Duplo abgebissen und übereinandergelegt = Nichtgeometrisch
Von ein paar Duplo abgebissen, der Länge nach sortiert und übereinandergelegt = Rautenförmig |
Ich finde diesen Vergleich wunderbar. Damit habe auch ich es verstanden! Ich hätte mir nur etwas kalorienärmeres gewünscht!
ene - Di 18.11.08 10:32
Rechteckig ist Knäckebrot, Quadratisch ist der Kraftklotz (heißt bei uns so).
Nichtgeometrisch sind dann angebissene Knäckebrote...nur fürs Dosenbrot fehlt mir der Verlgeich.
Tilo - Di 18.11.08 14:40
ene hat folgendes geschrieben : |
Rechteckig ist Knäckebrot, Quadratisch ist der Kraftklotz (heißt bei uns so).
Nichtgeometrisch sind dann angebissene Knäckebrote...nur fürs Dosenbrot fehlt mir der Verlgeich. |
Vorschlag: Dosenbrot=ein in einer Datenstruktur gekapseltes Array. (z.B. Tlist)
Arne - Mi 19.11.08 07:41
ene hat folgendes geschrieben : |
Müsste doch eigentlich so gehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var myIndexX, myIndexY : Integer; myArray : array[0..3, 0..15] of Byte; begin for myIndexX := Low(myArray) to High(myArray) do begin for myIndexY := Low(myArray[myIndexX]) to High(myArray[myIndexX]) do begin ... end; end; end; | |
Danke, genau so gehts auch. Schade, dass sowas nicht in der Onlinehilfe steht.
Wolle92 - Mi 19.11.08 17:01
weils in der Onlinehilfe nicht alles gibt...
Und sowas ist halt etwas, was man sich selbst ausdenken muss, wenn alles in Bausteinen in der Onlinehilfe stünde, dann müssten Programmierer ja nichts mehr selbst machen...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!