Seite 1 von 1

struct in struct [Erledigt]

Verfasst: 04.04.2013 17:04
von computerfreak
Hallo ,
würde mich mal interresieren , wie man sowas irgendwie anders lösen kann :

Code: Alles auswählen

Structure item
  item.item[100]
  integer.i
EndStructure

Structure tree
  items.item[100]
  x.i
  ...
EndStructure
^^ Das gibt nämlich eine Fehlermeldung wegen endloser rekursivität.
Sinn davon wäre eine Baumstruktur , mit theoretisch unendlichen "subitemstufen"
(also wie ein treeGadget als struktur 8) )

Danke schonmal

Re: struct in struct

Verfasst: 04.04.2013 17:22
von STARGÅTE
zB mit einer Liste:

Code: Alles auswählen

Structure TreeElement
  List Child.TreeElement()
  Integer.i
  String.s
EndStructure

Define Tree.TreeElement

AddElement(Tree\Child())
AddElement(Tree\Child()\Child())
Tree\Child()\Child()\String = "Hallo Welt"

Re: struct in struct

Verfasst: 04.04.2013 17:23
von NicTheQuick
Das geht ganz gut mit LinkedLists:

Code: Alles auswählen

Structure item
	List childList.item()
	integer.i
EndStructure

Structure tree
	root.item
	x.i
	;...
EndStructure

Define tree.tree

Debug "Root item: " + tree\root\integer
Debug "Children: " + ListSize(tree\root\childList())

Debug "Adding 10 children"
Define i.i
For i = 1 To 10
	If AddElement(tree\root\childList())
		tree\root\childList()\integer = i * 10
	EndIf
Next

Debug "Adding 2 subchilds to all 10 children"
ForEach tree\root\childList()
	Define *item.item = @tree\root\childList()
	For i = 1 To 2
		If AddElement(*item\childList())
			*item\childList()\integer = *item\integer + i
		EndIf
	Next
Next

Procedure IterateOverTree(*item.item, level.i = 0)
	Debug RSet("", level + 1, "+") + *item\integer
	If (ListSize(*item\childList()) > 0)
		ForEach *item\childList()
			IterateOverTree(@*item\childList(), level + 1)
		Next
	EndIf
EndProcedure

Debug "Iterate over the tree"
IterateOverTree(@tree\root)
Edit:
Da war Stargate mal wieder schneller. :D

Re: struct in struct

Verfasst: 04.04.2013 17:25
von computerfreak
vielen Dank.
Genau sowas hab ich gesucht !
:allright: :mrgreen: