将树视图节点列表转换为组合记录

时间:2013-03-26 11:02:08

标签: c# linq treeview ilist radtreeview

我在这个例子中没有示例代码,因为我不知道从哪里开始并杀死我!

基本上我有一个RadTreeView节点集合,这些节点都经过检查,并以

的形式返回
IList<RadTreeNode> nodeCollection = RadTreeView1.CheckedNodes;

这些值的格式如下,

  

001001009001,001001009002,001001009003,001001009004,001001009005,   001001010002,001001010003

这可能看起来很复杂,但每组3个数字指的是元素,例如001 001 009 001

我总共拥有5个权限,这些权限由最后三个字符反映出来,如果它们不在列表中,可以选中或取消选中这些权限,我想在输出中输入零,否则为1。其他组指的是位置

  

示例输出:001,001,009,1,1,1,1,1(因为在这个例子中全部   五个私人已被检查)001,001,010,0,1,1,0,0(因为只有2&amp;   已经检查过3个)

非常感谢任何帮助!!

由于

1 个答案:

答案 0 :(得分:2)

static void Show()
{
    IEnumerable<string> lst = new string[]{"001001009001", "001001009002", 
       "001001009003", "001001009004", "001001009005", "001001010002", 
       "001001010003" };
    var res = Process(lst);
    forech(string str in res)
    {
        Console.WriteLine(str);
    }
}
static List<string> Process(IEnumerable<string> input)
{
    Dictionary<string, int[]> elements = new Dictionary<string,int[]>();

    foreach (var str in input)
    {
        string element = str.Substring(0, 9);
        int privelegeNumber = int.Parse(str.Substring(9, 3));
        if (!elements.ContainsKey(element))
        {
            elements.Add(element, Enumerable.Repeat(0, 5).ToArray());
        }
        elements[element][privelegeNumber - 1] = 1;
    }
    List<string> result = new List<string>();
    foreach (var element in elements)
    {
        StringBuilder sb = new StringBuilder(21);
        sb.Append(element.Key.Substring(0, 3));
        sb.Append(",");
        sb.Append(element.Key.Substring(3, 3));
        sb.Append(",");
        sb.Append(element.Key.Substring(6, 3));
        foreach (int privelege in element.Value)
        {
            sb.Append(",");
            sb.Append(privelege);
        }
        result.Add(sb.ToString());
    }
    return result;
}