列出分层结构路径的
我有一个像这样的路径列表:
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 = "/" };
其余代码是相同的。