13. februar 2009 - 21:08
Der er
11 kommentarer og 1 løsning
Hjælp til en recursiv function
Hejsa, Jeg har en generic list som jeg skal lave en rekursiv metode til. Jeg er kommet frem til dette : private string loadSites(int id, List<Site> data) { string result = ""; result += "<nodes>"; foreach (Site site in data) { result += "<node text=\""+ site.MenuName +"\" url=\""+ site.SiteUrl +"\">"; loadSites(site.Id, data); result += "</node>"; } result += "</nodes>"; return result; } Det virker dog ikke helt som det skal. Når jeg kalder min metode inde i loopen crasher skidtet. Er der en der kan hjælpe mig færdig med dette ? /websam
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
13. februar 2009 - 21:23
#1
En rekursiv funktion skal starte med en "if" der afgør om man er færdig. Du har ingen "if". Hvad er kriteriet for at stoppe? (...eller en "if" et andet sted i funktionen...)
13. februar 2009 - 21:29
#2
Jeg har to felter i min database Id og ParentId. Alle top noder har ParentId = 0 og under noder har så ParentId = Id, så hvis en top node har under noder skal functionen loades igen. Gav det nogen mening ?
13. februar 2009 - 21:38
#3
Nej ;) Hvad indeholder dit site-object? Og hvad skal du med Id, når du ikke bruge det?
13. februar 2009 - 21:48
#4
Mit site object indeholder : Id, ParentId, MenuName og SiteUrl og resultatet skal være noget i stil med dette : Node 1 - Node 1.1 - Node 1.2 Node 2 - Node 2.1 -- Node 2.1.1 -- Node 2.1.2 - Node 2.2 Node 3 - Node 3.1 - Node 3.2 Altså skal jeg rende min generic list igennem for at liste alle top noder med tilhørende under noder. Og for at forklare top/under noder så ser Id og ParentId således ud i min database: 1 - 0 2 - 0 3 - 1 4 - 2 5 - 2 6 - 3 Altså alle top noder har ParentId = 0 og alle undernoder har ParentId = Id der høre til over noden. Hjalp det på det ?
13. februar 2009 - 21:53
#5
Måååske noget i retning af: private string loadSites(int id, List<Site> data) { string result = ""; result += "<nodes>"; foreach (Site site in data) { if (site.ParentId==id) { result += "<node text=\""+ site.MenuName +"\" url=\""+ site.SiteUrl +"\">"; loadSites(site.Id, data); result += "</node>"; } } result += "</nodes>"; return result; } kald den med loadSites(0,data);
13. februar 2009 - 22:08
#6
Ja så kommer den da ikke med fejl mere ;o) Men den loader kun top noderne så if sætningen må ikke være rigtig ?
13. februar 2009 - 22:31
#7
Jo, den er korrekt nok. Men du skal nok rette loadSites(site.Id, data); til result+=loadSites(site.Id, data);
13. februar 2009 - 22:56
#8
Ok det hjalp da lidt mere på det så skal jeg bae lige have styr på disse to : result += "<nodes>"; result += "</nodes>"; De skal kun laves først og sidst, som en wrapper om noderne, men det kommer til at se således ud : <nodes> <node text="Forside" url="forside.aspx"> <nodes><-- DUER IKKE <node text="Om os" url="omos.aspx"> <nodes></nodes><-- DUER IKKE </node> <node text="Kontakt" url="kontakt.aspx"> <nodes></nodes><-- DUER IKKE </node> </nodes><-- DUER IKKE </node> <node text="Ledige Stillinger" url="ledige-stillinger.aspx"> <nodes><-- DUER IKKE <node text="Montør" url="montor.aspx"> <nodes></nodes><-- DUER IKKE </node> <node text="Sælger" url="saelger.aspx"> <nodes></nodes><-- DUER IKKE </node> </nodes><-- DUER IKKE </node> </nodes>
13. februar 2009 - 23:06
#9
Så skal du gøre det udenfor funktionen: String s=""; s+="<nodes>"; s+=loadSites(0,data); s+="</nodes>";
13. februar 2009 - 23:24
#10
Ja det fandt jeg også frem til ;o) Smid et svar så er der point på vej og tak for hjælpen.
13. februar 2009 - 23:27
#11
Jeg samler slet ikke på point, tak. Svar selv, og accepter dit eget svar.
17. februar 2009 - 10:59
#12
Ok
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.