2013-02-23 3 views
2

Я уверен, что есть простой ответ на этот вопрос, но он убивает меня, почему я не могу это понять. Я пытаюсь заполнить древовидную структуру на основе 5-символьной строки.Построение древовидной структуры на основе символьной строки

public List<string> lst = new List<string>(); 

lst.Add("10000"); 
lst.Add("11000"); 
lst.Add("11100"); 
lst.Add("12000"); 
lst.Add("12100"); 
lst.Add("20000"); 
lst.Add("21000"); 
lst.Add("22000"); 

Я пытаюсь получить выше в этом типе дерева

hierarchy

Опять же, я уверен, что это старая шляпа для многих разработчиков опытных C#, но я просто не могу» t выведите простой рекурсивный или linq-решение.

+0

Что вы используете для вас TreeView WinForms или WPF? Пожалуйста, взгляните на эту ссылку: http://social.msdn.microsoft.com/Forums/en/winforms/thread/dae1c72a-dd28-4232-9aa4-5b38705c0a97 –

+0

извините, используя winforms – Brad

+0

Я думаю, что, возможно, исказил проблему , в приведенном выше я добавляю значения в список, но в действительности эти строковые значения уже назначены. Я дошел до создания списка строк, просто не знаю, как разложить их на древовидную структуру. – Brad

ответ

1

Это рекурсивный метод должен сделать это:

static TreeNode[] GetNodes(IEnumerable<string> items, string prefix = "") 
{ 
    int preLen = prefix.Length; 

    // items that match the current prefix and have a nonzero character right after 
    // the prefix 
    var candidates = items.Where(i => i.Length > preLen && 
             i[preLen] != '0' && 
             i.StartsWith(prefix)); 

    // create nodes from candidates that have a 0 two characters after the prefix. 
    // their child nodes are recursively generated from the candidate list 
    return candidates.Where(i => i.Length > preLen + 1 && i[preLen + 1] == '0') 
        .Select(i => 
          new TreeNode(i, GetNodes(candidates, prefix + i[preLen]))) 
        .ToArray(); 
} 

Вы можете просто вызвать его так:

treeView.Nodes.AddRange(GetNodes(lst)); 
+0

JLRishe благодарит за код работает отлично. Спасибо.. – Brad

 Смежные вопросы

  • Нет связанных вопросов^_^