列出分层结构路径的

我有一个像这样的路径列表:

Root Root/Folder1 Root/Folder1/SubFolder1.1 Root/Folder1/SubFolder1.2 Root/Folder2 OtherRootFolder OtherRootFolder/Folder1 

我需要用Folder + List of Children创建一个层次结构

 public class FolderTreeModel { public string Title { get; set; } public List Children { get; set; } } 

如何将这些路径拆分为该结构,以便看起来像:

 Root '-- Folder1 '---- SubFolder1.1 '---- SubFolder1.2 '-- Folder2 '-- OtherRootFolder '---- Folder1 

提前致谢。

这是您需要的代码:

 Action> ensureExists = null; ensureExists = (ftm, ts) => { if (ts.Any()) { var title = ts.First(); var child = ftm.Children.Where(x => x.Title == title).SingleOrDefault(); if (child == null) { child = new FolderTreeModel() { Title = title, Children = new List(), }; ftm.Children.Add(child); } ensureExists(child, ts.Skip(1)); } }; 

然后我可以这样做:

 var paths = new [] { "Root", "Root/Folder1", "Root/Folder1/SubFolder1.1", "Root/Folder1/SubFolder1.2", "Root/Folder2", "OtherRootFolder", "OtherRootFolder/Folder1", }; var root = new FolderTreeModel() { Title = "/", Children = new List() }; foreach (var path in paths) { var parts = path.Split('/'); ensureExists(root, parts); } 

然后我得到这个结果:

结果

如果将FolderTreeModel的定义FolderTreeModel为:

 public class FolderTreeModel : List { public string Title { get; set; } } 

…然后代码变得更简单:

 Action> ensureExists = null; ensureExists = (ftm, ts) => { if (ts.Any()) { var title = ts.First(); var child = ftm.Where(x => x.Title == title).SingleOrDefault(); if (child == null) { child = new FolderTreeModel() { Title = title }; ftm.Add(child); } ensureExists(child, ts.Skip(1)); } }; var root = new FolderTreeModel() { Title = "/" }; 

其余代码是相同的。