【问题标题】:Convert List of Tree View nodes to combined record将树视图节点列表转换为组合记录
【发布时间】:2013-03-26 11:02:08
【问题描述】:

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

基本上,我有一个 RadTreeView 节点集合,这些节点被检查并返回为

IList<RadTreeNode> nodeCollection = RadTreeView1.CheckedNodes;

这些值的格式如下,

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

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

我总共有 5 个特权,这些特权由最后三个字符反映,如果它们不在列表中,则可以选中或不选中它们,我希望输出中的值为 0,否则为 1。其他组指的是地点

示例输出:001,001,009,1,1,1,1,1(因为在本例中所有 五个 privs 已被检查) 001,001,010,0,1,1,0,0 (因为只有 2 & 3个已检查)

非常感谢任何帮助!

谢谢

【问题讨论】:

    标签: c# linq treeview ilist radtreeview


    【解决方案1】:
    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;
    }
    

    【讨论】:

    • Enumerable.Repeat(0,5).ToArray() 可以更改为 new int[5],因为无论如何所有值都将默认为 0。但否则,这或多或少是我会做的。 +1。
    • 谢谢,但由于 c# 对非初始化值给出错误,我不依赖默认值并始终显式初始化变量
    • 谢谢德米特里这是完美的! +1 也将我介绍给 Dictionary :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多