Hej! Om jag förstår frågan och din pseudkod rätt så vet du redan hur du ska populera din hashtabell med din metod "getObjectsRecursiv" och det enda återstående problemet är att rekursivt loopa igenom en sådan hashtabell och skriva ut alla barnen för varje nivå.Problem med hashtabeller
Jag har jätte problem med Hashtabeller.. Min nyckel beskriver indexet för djupet i en rekursiv loop. För varje index kan det finnas ett eller flera barn. Dessa skall placeras i en array eller helst en objectsamling. Jag vill alltså ha en hashtabell som pekar på array/objectsamling för varje nivå i hierarkin.
Hashtabell:
Nyckel(Index) | Värde
1 | barn1,barn2,barn3 osv.
2 | barn4,barn5
3 | barn8
Jag har försökt, men jag kommer inte vidare:
public Hashtable myHashtable = new Hashtable();
getObjectsRecursiv(iParent,0)
getObjectsRecursiv(int iParent, int iDeep)
{
// Här hämtar jag object som är barn till theobject....
strSQL = "SELECT iIDBarn from tbl_rekursivt Where Parent = " + iParent
..
..
För varje barn loopa igenom
Släng in iIDBarn i en array och peka på myHashtable med nyckeln iDeep
getObjectsRecursiv(iBarn,iDeep+1);
Next
}
WriteValuesFromHash()
{
for(int i = 0; i <myHashtable.count; i++)
{
// Här vill jag skriva ut samtliga barn för varje nivå..
}
}
Hur löser man detta???Sv: Problem med hashtabeller
WriteValuesFromHash()
{
foreach (DictionaryEntry myDE in hash)
{
//myDe.Value = din objectlista
//myDe.Key = din nyckel. dvs 1,2,3,4,5
}
}Sv: Problem med hashtabeller
Här är ett litet exempel med en 'IDictionary<int, int[]>' som illustrerar hur man kan utföra de rekursiva anropen.
class Program
{
static void Main(string[] args)
{
IDictionary<int, int[]> myHashtable = new Dictionary<int, int[]>();
myHashtable.Add(1, new int[]{2,3,4});
myHashtable.Add(3, new int[]{5,6,7});
myHashtable.Add(7, new int[]{8,9,10});
// starta anropen med 1 som "root-parent"
WriteValuesFromHash(1, myHashtable, Console.Out);
Console.ReadLine();
}
private static void WriteValuesFromHash(int parent, IDictionary<int, int[]> myHashtable, System.IO.TextWriter textWriter)
{
if(!myHashtable.ContainsKey(parent)) {
// det finns inga children att skriva ut
return;
}
int[] children = myHashtable[parent];
// skriv ut värdet på parent samt alla dess children
textWriter.WriteLine("Parent: " + parent);
foreach(int child in children) {
textWriter.WriteLine("Child: " + child);
}
textWriter.WriteLine("---------------");
// nu har vi ovan skrivit ut alla children
// till metodens parent-parameter och kan nu göra
// de rekursiva anropen med varje child som parameter
foreach (int child in children) {
WriteValuesFromHash(child ,myHashtable, textWriter);
}
}
}