有这样一个ArrayList:
ArrayList array = new ArrayList();
array.Add("BB11-AAMDP-C01-B034T");
array.Add("BB11-AAMDP-C01-B324T");
array.Add("BB12-AAMDP-H00-XXXXT");
array.Add("BB12-ASCOP-M00-XXXXT");
array.Add("BB13-ABFCX-C01-A597T");
array.Add("BB13-ABFCP-M00-XXXXT");
要求实现如下效果:

解决方案 »

  1.   

    总共分为7个级别,
    BB11-AAMDP-C01-B034T
    这里 bb11是第一级别
    AA是第二级别
    M是第三级别
    DP是第四级别
    C是第五
    01第六
    B034T是第七
      

  2.   

    BB12-ASCOP-M00-XXXXT
    以‘-’分割。
    0位置是父节点
    1位置将被分成3个子节点。规律是前两位为一个节点,中间一位为一个节点,后面两位为一个节点
    2位置,字母为一个节点。数字部分为一个节点
    3位置为最下级子节点
    。最关键就是1,2位置的处理
      

  3.   

    这里有一个关键的地方 就是:每个级别的节点上不能有重复的。比如:第一级别上有两个BB11那么在第一级别中只会出现一次 BB11而不会出现两次,而且在其子节点上 也是同样的道理
      

  4.   

    只考虑算法的话其实最好先用List<>,省略转换
    List思路:
    用List<List<string>> lst存放装换后的数据
    0位置:在lst中筛选元素中的第1个元素,去掉相同的部分,生成根节点
    1位置:遍历lst中的元素。如果元素的第一元素和根节点的text相同,按1位置的规律分割再判断各部分在该根上是否存在text相同的节点,如果存在continue,不存在创建新节点添加
    2位置:按1的处理方式创建
    3位置:直接创建节点添加
      

  5.   

    额。。如果使用10L的方法,那得创建多少的list? 还有如何标识 子节点的父节点不重复呢?
      

  6.   

    另外的思路:
    将字符串如BB12-ASCOP-M00-XXXXT
    分为List<string> 元素为【BB12】【AS】【C】【OP】【M】【00】【XXXXT】
    然后将每一个List<string> 转化为一个List<Treenode> :lnodes
    另外定义一个List<Treenode>结合只保存根节点:ltree
    遍历每个一个List<Treenode>根据元素在集合中的位置inde和Treenode中的Level的对应关系在
    ltree中将节点添加到对应的父节点上
      

  7.   

    我给提示下,你分几步处理:
    (1)在你的各个级别上加上分隔符,bb.11.m.dp.c.01.b034t,所有内容都转成这个形式。
    (2)写个函数, 比方叫addNode(string sPath), sPath就是 bb.11.m.dp.c.01.b034t 的形式。这个函数中实现了把它添加成树节点, 如果哪一级重复(定位父节点),重复时只需要在现有节点下添加即可。
    如果你还嫌不明白,写7个小函数,AddLevel1(string sPath1) 这添加第一级(顶级),AddLevel2(string sPath2) .. sPathN(string sPathN)  sPath1 = "bb"  sPath2 = bb.11 .... sPathN =  bb.11.m.dp.c.01.b034t  .  这些函数的逻辑也是判断 node在不在,如果不在,就添加 ,如果在,返回节点名称,为下级添加或判断做准备。 
    递归,Node.Tag(就是存你的编码的),这两关要过。
      

  8.   

    啊哈 成了private void Form2_Load(object sender, EventArgs e)
            {
                ArrayList array = new ArrayList();
                array.Add("BB11-AAMDP-C01-B034T");
                array.Add("BB11-AAMDP-C01-B324T");
                array.Add("BB12-AAMDP-H00-XXXXT");
                array.Add("BB12-ASCOP-M00-XXXXT");
                array.Add("BB13-ABFCX-C01-A597T");
                array.Add("BB13-ABFCP-M00-XXXXT");
                for (int i = 0; i < array.Count; i++)
                {
                    string[] info = array[i].ToString().Split('-');
                    string gongsi = info[0];
                    string diqu = info[1].Substring(0, 2);
                    string kehu = info[1].Substring(2, 1);
                    string hangye = info[1].Substring(3, 2);
                    string chanpin = info[2].Substring(0, 1);
                    string yuefen = info[2].Substring(1, 2);
                    string xiangmu = info[3];
                    this.judge(this.treeView1.Nodes, gongsi, diqu, kehu, hangye, chanpin, yuefen, xiangmu, 1);
                }
            }
            public TreeNode judge(TreeNodeCollection var,string gongsi,string diqu,string kehu, string hangye,string chanpin,string yuefen,string xiangmu,int type)
            {
                TreeNode t = null;
                string info = "";
                switch (type)
                {
                    case 1:
                        info = gongsi;
                        break;
                    case 2:
                        info = diqu;
                        break;
                    case 3:
                        info = kehu;
                        break;
                    case 4:
                        info = hangye;
                        break;
                    case 5:
                        info = chanpin;
                        break;
                    case 6:
                        info = yuefen;
                        break;
                    case 7:
                        info = xiangmu;
                        break;
                }
                type++;
                if (type == 9)
                {
                    return null;
                }
                foreach (TreeNode tn in var)
                {
                    if (tn.Text == info)
                    {
                        t = tn;
                    }
                }
                if (t == null)
                {
                    t = new TreeNode();
                    t.Text = info;
                    var.Add(t);
                }
                return judge(t.Nodes, gongsi, diqu, kehu, hangye, chanpin, yuefen, xiangmu, type);
            }