i have the following data
root root/blue root/blue/temp root/main root/main/dev root/main/back root/etc/init root/etc/init/dev root/etc/init/test root/etc/init/back root/etc/init/server root/etc/init/system root/etc/init/setup root/system root/system/temp1 root/system/temp2 root/system/temp3 root/system/temp4 root/system/temp5 root/system/temp5/dev1 root/rel root/intel/archival root/intel/archival/newsreel root/intel/archival/recording
i would like to be able to use the class to either databind to a tree control (ASP.Net) or generate a UL/Li for jquery consumption.
I need to convert it to a List class that will return the proper hierarchy. I have tried many different approach so far, and I’m not able to find a solution. I’m stuck. I tried asking in an earlier post but the solution did not work, after many attempts to modify some it just plain does not work. I hope one of you can help me out.
Also this is not a simple split functions, I know how to split a string.
Thank you in advance
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Here is a solution that generates a nested dictionary of NodeEntry items:
public class NodeEntry
{
public NodeEntry()
{
this.Children = new NodeEntryCollection();
}
public string Key { get; set; }
public NodeEntryCollection Children { get; set; }
}
public class NodeEntryCollection : Dictionary<string, NodeEntry>
{
public void AddEntry(string sEntry, int wBegIndex)
{
if (wBegIndex < sEntry.Length)
{
string sKey;
int wEndIndex;
wEndIndex = sEntry.IndexOf("/", wBegIndex);
if (wEndIndex == -1)
{
wEndIndex = sEntry.Length;
}
sKey = sEntry.Substring(wBegIndex, wEndIndex - wBegIndex);
if (!string.IsNullOrEmpty(sKey)) {
NodeEntry oItem;
if (this.ContainsKey(sKey)) {
oItem = this[sKey];
} else {
oItem = new NodeEntry();
oItem.Key = sKey;
this.Add(sKey, oItem);
}
// Now add the rest to the new item's children
oItem.Children.AddEntry(sEntry, wEndIndex + 1);
}
}
}
}
To use the above, create a new collection:
NodeEntryCollection cItems = new NodeEntryCollection();
then, for each line in your list:
cItems.AddEntry(sLine, 0);
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0