我有以下数据
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
我希望能够将该类用于数据绑定到树控件(ASP.Net)或生成用于jquery消耗的UL / Li。
我需要将它转换为List类,它将返回适当的层次结构。到目前为止,我尝试了很多不同的方法,但我无法找到解决方案。我被卡住了。我尝试在较早的帖子中询问,但解决方案没有用,经过多次尝试修改一些它只是简单无效。我希望你们中的一个可以帮助我。
这也不是一个简单的分割函数,我知道如何分割字符串。
提前谢谢
答案 0 :(得分:2)
这是一个生成NodeEntry项的嵌套字典的解决方案:
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);
}
}
}
}
要使用上述内容,请创建一个新集合:
NodeEntryCollection cItems = new NodeEntryCollection();
然后,对于列表中的每一行:
cItems.AddEntry(sLine, 0);