Hi Leute,
meint ihr - auch wenn es nicht ganz "programmierkonform" ist - es wäre eine gute Idee,
die FOREACH-Schleife optional auch z.B. in mehrdimensionalen Types durch alle Dimensionen zu jagen?
Normal wird ja immer nur die erste Dimension durchlaufen.
Beispiel:
TYPE test
ENDTYPE
LOCAL arr[] as test
DIM arr[10][10]
MULTIDIMFOREACH blub in arr[] //oder so ;)
//alle xy-Dimensionen durchlaufen...
NEXT
//Aktuelle und eigentlich normale "Alternative" mit mehr Schreibaufwand
FOR i%=0 TO 9
FOR j%=0 TO 9
NEXT
NEXT
Wenns 'ne schlechte Idee ist, vergebt mir. :whistle: :nana:
MfG
ähh, wie soll das denn gehen? Wie soll dein MULTIFOREACH denn wissen, welche Dimension zuerst durchlaufen werden soll?
Was spricht bei mehrdimensionalen Arrays gegen geschachtelte FOREACH-Schleifen?
DIM arr[10][10]
FOREACH bla in arr[]
FOREACH blub in arr[bla][]
...processing...
NEXT
NEXT
Ach so habe ich das noch gar nicht probiert... :D
Das ist natürlich das, was ich gesucht habe.
Danke! ;)
geht das?
Die Idee ist schick. Leider ignoriert sowohl FOREACH als auch LEN() die erste Dimension und nimmt immer die 0 an. Bleibt wohl nur ein nested loop. Und bla ist natürlich kein Index sondern ein Inhalt :).
:offtopic:
Wo wir hier gerade bei Wünschen für die Sprache sind: Ich wünsche mir casting. Hab schon angefangen alle meine Types in ein Muttertype zu stecken, was alle Typesorten beinhalten kann :S.
lol
ja, das geht net. Wäre aber prinzipiell nicht schlecht.
ein
FOREACH bla IN arr[][]
müsste dann erlaubt sein. Die Schleife könnte dann
arr[0][0]
arr[0][1]
...
arr[0][9]
arr[1][0]
...
durchlaufen.
sollte machbar sein. Hat jemand ein praktisches Beispiel dazu?
Eine Map als Type:
TYPE Tile
spr_id%
...
FUNCTION Blub:
...
ENDFUNCTION
ENDTYPE
GLOBAL Map[] AS Tile
REDIM Map[10][10]
...
FOREACH t IN Map[]
t.Blub() // zb zeichen oder sowas
NEXT
Würde ich auch gut finden! :)
Macht nen sehr schönen und vorallen übersichtlichen Code.
Wie man allerdings dann auf die verschiedenen Felder zugreifen kann, oder soll .... Hmmmmm :)
@Schranz0r: Genau bei dem Beispiel bin ich auf die Idee gekommen... :D
Auf die einzelnen Felder zugreifen geht dann natürlich erstmal nicht so einfach, aber das braucht man auch nicht immer.
OK, ich hab das mal eingebaut und es umgeht damit auch die BOUNDS() Prüfung des Arrays (Ich weiß die Größe ja und bin sicher, dass hier nichts daneben geht).
Das sollte also auch bisserl schneller werden.
Du bist der Beste! :booze:
nice <3
Habs grad gelesen.
Warum überhaupt Mehrdimensional?
Bei der Tilemap z.B. brauch das Tile was gemalt werden soll doch nur die x,y Pos.
Kann dann doch alles in eine Liste.
Z.B. weils in einer FOREACH irrelevant sein sollte (in einem Basic), wie viele Dimensionen man hat.
Da es schon oft passiert ist, dass Leute sich gefragt haben, wieso jetzt nur die erste Zeile angezeigt wird. ;)
Und es ist einfach bequemer.
@backslider
ja foreach solle alle Elemente durchlaufen, da sind wir gleicher Meinung.