17. september 2007 - 13:38
Der er
15 kommentarer og 1 løsning
Rekursiv søgning
Hej Jeg har en TreeNodeCollection hvor i jeg gerne vil søge efter en værdi. Jeg har lavet en rekursiv funktion til at gøre det, men der er en fejl et eller andet sted jeg ikke kan finde - nogen der er vågen? :) private TreeNode findNode(TreeNodeCollection t, string strId) { TreeNode node = new TreeNode(); foreach (TreeNode n in t) { if (n.ChildNodes.Count >= 1) { if (n.Value == strId) { node = n; } else { findNode(n.ChildNodes, strId); } } else { if (n.Value == strId) { node = n; } } } return node; }
Annonceindlæg fra QNAP
17. september 2007 - 13:54
#1
du glemmer værdien der returneres fra findNode. Men det kan nok gøres lidt simplere (helt utestet): private TreeNode findNode(TreeNodeCollection t, string strId) { TreeNode node = null; foreach (TreeNode n in t) { if (n.Value == strId) { node = n; } else { node = findNode(n.ChildNodes, strId); } } return node; }
17. september 2007 - 13:56
#2
enig med erik, at det kan gøres pænere i hvertfald... men din egen kode rettet til på en grim måde så tror jeg den vil fungere med private TreeNode findNode(TreeNodeCollection t, string strId) { TreeNode node = null; foreach (TreeNode n in t) { if (n.ChildNodes.Count >= 1) { if (n.Value == strId) { node = n; break; } else { node = findNode(n.ChildNodes, strId); if(node != null) break; } } else { if (n.Value == strId) { node = n; } } } return node; }
17. september 2007 - 13:59
#3
Sådan her må det være :) - jeg havde som erik skriver glemt at tildele værdien. Smid et svar begge to så skal i få point :) private TreeNode findNode(TreeNodeCollection t, string strId) { TreeNode node = null; foreach (TreeNode n in t) { if (n.Value == strId) { node = n; } else { node = findNode(n.ChildNodes, strId); } if (node != null) { break; } } return node; }
17. september 2007 - 14:02
#4
:)
17. september 2007 - 14:09
#5
Måske endda: du glemmer værdien der returneres fra findNode. Men det kan nok gøres lidt simplere (helt utestet): private TreeNode findNode(TreeNodeCollection t, string strId) { foreach (TreeNode n in t) { if (n.Value == strId) { return n; } else { return findNode(n.ChildNodes, strId); } } return null; }
17. september 2007 - 14:28
#6
Den kan jeg ikke lige få til at virke, den returnerer null når den ikke burde. Men den er ellers nydelig :)
17. september 2007 - 14:30
#7
Det skal nok være private TreeNode findNode(TreeNodeCollection nodes, strId) { foreach(TreeNode node in nodes) { if(node.Value == strId) return node; TreeNode foundNode = findNode(node.ChildNodes, strId); if(foundNode != null) return foundNode; } return null; }
17. september 2007 - 14:34
#8
Det er korrekt. Den er lidt lusket. 2 secs.
17. september 2007 - 14:34
#9
Rekursive metoder er altid luskede hvis man ikke har rørt ved dem i et stykke tid:D
17. september 2007 - 14:35
#10
Utestet, men bedre, måske ;) private TreeNode findNode(TreeNodeCollection t, string strId) { if (n.Value == strId) { return n; } foreach (TreeNode n in t) { TreeNode foundNode = findNode(n.ChildNodes, strId); if(foundNode != null) return foundNode; } return null; }
17. september 2007 - 14:36
#11
Nej, glem lige den ... der fik blandt kul og koks sammen... ;)
17. september 2007 - 14:36
#12
...der fik jeg blandet kul og koks sammen... ;)
17. september 2007 - 14:42
#13
Kalps sidste version virker, som den skal. Skal vi ikke slutte den her? :) Tak for hjælpen folkens. P.S. Erik smid et svar, så kan i dele hvis det er ok?
17. september 2007 - 14:45
#14
ingen årsag:)
17. september 2007 - 14:51
#15
Jeg samler slet ikke på point, tak.
17. september 2007 - 14:55
#16
Okay :) Så går det hele til kalp.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.