0

在这种情况下我没有示例代码,因为我不知道从哪里开始并且它杀死了我!

基本上我有一个 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)

任何帮助是极大的赞赏!!

谢谢

4

1 回答 1

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;
}
于 2013-03-26T11:46:35.150 回答