2013-02-23 5 views
2

저는이 간단한 대답이 확실하다고 확신합니다.하지만이 사실을 알 수없는 이유는 무엇인지 알지 못합니다. 5 문자 문자열을 기반으로 트리보기를 채우려고합니다. '나는 다시 나무문자열을 기반으로 트리 뷰를 작성하십시오.

hierarchy

이러한 유형의 위의를 얻으려고

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"); 

는, 나는 많은 경험의 C# 개발자들에게 오래된 모자를 확신 해요,하지만 난 그냥 수 간단한 재귀 또는 linq 솔루션을 찾아 내지 마십시오.

+0

? 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(); 
} 

그냥 이런 식으로 호출 할 수 있습니다 :

당신이 윈폼이나 WPF를 트 리뷰를 위해 사용하고있는
treeView.Nodes.AddRange(GetNodes(lst)); 
+0

JLRishe 코드에 대한 감사는 완벽하게 작동합니다. 고맙습니다.. – Brad