根据字符串构建树视图

时间:2013-02-23 05:24:40

标签: c# winforms linq treeview treenode

我很确定这个问题有一个简单的答案,但它让我无法理解为什么我无法解决这个问题。我正在尝试使用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#开发人员来说,我确信它是老套的,但我无法弄清楚一个简单的递归或linq解决方案。

1 个答案:

答案 0 :(得分: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));