Author Topic: [Idee] FOREACH-Schleife optional mehrdimensional durchlaufen  (Read 4143 times)

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
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:
Code: GLBasic [Select]
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

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 915
    • View Profile
ä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?

Code: GLBasic [Select]
DIM arr[10][10]

FOREACH bla in arr[]
    FOREACH blub in arr[bla][]
        ...processing...
    NEXT
NEXT
 

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Ach so habe ich das noch gar nicht probiert...  :D
Das ist natürlich das, was ich gesucht habe.

Danke! ;)

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10709
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
geht das?

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile

Offline monono

  • Mr. Polyvector
  • ***
  • Posts: 213
    • View Profile
    • Sockel Lernmedien
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.

Offline Quentin

  • Prof. Inline
  • *****
  • Posts: 915
    • View Profile
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.

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10709
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
sollte machbar sein. Hat jemand ein praktisches Beispiel dazu?

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5020
  • O Rly?
    • View Profile
Eine Map als Type:
Code: GLBasic [Select]
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 :)
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
@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.

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10709
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
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.

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Du bist der Beste!  :booze:

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5020
  • O Rly?
    • View Profile
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Markus

  • Mr. Polyvector
  • ***
  • Posts: 125
  • Offline
    • View Profile
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.



Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
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.