有这样一个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");
要求实现如下效果:
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");
要求实现如下效果:
BB11-AAMDP-C01-B034T
这里 bb11是第一级别
AA是第二级别
M是第三级别
DP是第四级别
C是第五
01第六
B034T是第七
以‘-’分割。
0位置是父节点
1位置将被分成3个子节点。规律是前两位为一个节点,中间一位为一个节点,后面两位为一个节点
2位置,字母为一个节点。数字部分为一个节点
3位置为最下级子节点
。最关键就是1,2位置的处理
List思路:
用List<List<string>> lst存放装换后的数据
0位置:在lst中筛选元素中的第1个元素,去掉相同的部分,生成根节点
1位置:遍历lst中的元素。如果元素的第一元素和根节点的text相同,按1位置的规律分割再判断各部分在该根上是否存在text相同的节点,如果存在continue,不存在创建新节点添加
2位置:按1的处理方式创建
3位置:直接创建节点添加
将字符串如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中将节点添加到对应的父节点上
(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(就是存你的编码的),这两关要过。
{
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);
}