struct in struct [Erledigt]

Für allgemeine Fragen zur Programmierung mit PureBasic.
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

struct in struct [Erledigt]

Beitrag 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
Zuletzt geändert von computerfreak am 04.04.2013 17:25, insgesamt 1-mal geändert.
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: struct in struct

Beitrag 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"
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: struct in struct

Beitrag 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
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

Re: struct in struct

Beitrag von computerfreak »

vielen Dank.
Genau sowas hab ich gesucht !
:allright: :mrgreen:
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
Antworten