2017-03-12 56 views
0

我們有一個列表需要轉換爲樹。 數據結構如何將列表轉換爲樹使用遞歸

public class node 
{ 
    public string name { get; set; } 
    public string Path { get; set; } 
    public List<node> child { get; set; } 
} 

例如:

var path = @"a\b\c\2017.log"; 
var filePath = path.Split('\\').ToList() 

結果需要轉換爲:

"FileName":"a", 
"Path":null, 
"ChildNode":[{ 
       "FileName":"b", 
       "Path":null, 
       "ChildNode":[{ 
           "FileName":"2017.log", 
           "Path":"a\b\\財務\2017.log", 
           "ChildNode":null 
+3

[so]是*不是*免費的寫作服務。預計你會嘗試**自己編寫代碼**。在[做更多研究]之後(http://meta.stackoverflow.com/questions/261592),如果你有問題,你可以**發佈你已經嘗試過**的清單,說明什麼是不工作的**並提供[**最小,完整和可驗證示例**](http://stackoverflow.com/help/mcve)。我建議閱讀[問]一個好問題和[完美問題](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)。另外,一定要參加[旅遊]。 – Igor

+0

並至少發佈正確的文本... * \財務*這不存在* var path = @「...」* – xanatos

+0

啊......不僅僅是一個樹形結構,它看起來是一個鏈接 - 列表結構...每個父母都有0-1個孩子...... – xanatos

回答

0
 public static TreeNode GetTreeNode(DirectoryInfo d) 
    { 
     DirectoryInfo[] children = d.GetDirectories(); 
     FileInfo[] files = d.GetFiles(); 
     IEnumerable<TreeNode> childNodes = from child in children select GetTreeNode(child); 
     IEnumerable<TreeNode> fileNodes = from file in files select new TreeNode(file.Name, file.Path, null); 
     return new TreeNode(d.Name, null, childNodes.Concat(fileNodes).ToList()); //Here we are merging directory list & File List 
    } 

//複合

 class TreeNode 
    { 
     string name; 
     string path; 
     List<TreeNode> children; 

     public TreeNode(string n, string p, List<TreeNode> cn) 
     { 
      this.name = n; 
      this.path = p; 
      this.children = cn; 
     } 
    }