Как создать иерархическую структуру со списком путей?

Я играю с Delta API Dropbox, когда я вызываю метод delta, я получаю список путей, измененный с момента последнего вызова.

/photos /public /photos/sample album /photos/sample album/boston city flow.jpg /photos/sample album/pensive parakeet.jpg /photos/sample album/costa rican frog.jpg /getting started.pdf /photos/how to use the photos folder.txt /public/how to use the public folder.txt /ies eai.pptx /documents /documents/windows phone toolkit in depth 2nd edition.pdf /prashant /prashant/iphone indexed list.bmml /photos/flower.jpg /photos/trs /photo.jpg /hello1 /hello1/new 

Мне было трудно создать иерархическую структуру (в ниже упомянутом classе), манипулируя строкой, может ли кто-нибудь предложить способ / идею, которую я могу достичь.

 public class DeltaItem { private List _items; public string Path { get; set; } public bool IsDir { get; set; } public List Items { get { return _items ?? (_items = new List()); } } } 

Это довольно простая операция синтаксического анализа. Во-первых, я бы определил class следующим образом:

 public class Node { private readonly IDictionary _nodes = new Dictionary(); public string Path { get; set; } } 

Оттуда это вопрос:

  1. Разбор пути (используя \ в качестве разделителя).
  2. Перемещение по дереву, при необходимости добавление новых узлов.

Вы можете обернуть это выше одним способом. Add :

 public void AddPath(string path) { char[] charSeparators = new char[] {'\\'}; // Parse into a sequence of parts. string[] parts = path.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries); // The current node. Start with this. Node current = this; // Iterate through the parts. foreach (string part in parts) { // The child node. Node child; // Does the part exist in the current node? If // not, then add. if (!current._nodes.TryGetValue(part, out child)) { // Add the child. child = new Node { Path = part }; // Add to the dictionary. current._nodes[part] = child; } // Set the current to the child. current = child; } } 

Это даст вам необходимую вам иерархию. Вы можете выявить операции, которые работают над словарем, который позволит вам пройти его, но так вы можете заполнить общую структуру, с которой будете работать.

Обратите внимание, что вы начинаете с уникального узла, у которого нет Path а затем итерации по вашему списку выше и вызова AddPath для каждого элемента в списке выше.

Решение @casperOne в порядке, но оно работает со списком в вопросе, только если вы используете

 char[] charSeparators = new char[] {'/'}; 

а затем

 char[] charSeparators = new char[] {'\\'};