现在有一特殊需求,有如下一矩阵:
A1(1...n) A2(1...n) A3(1...n) A4(1...n) ... AN(1...n)
B1(1...n) B2(1...n) B3(1...n) B4(1...n) ... BN(1...n)
C1(1...n) C2(1...n) C3(1...n) C4(1...n) ... CN(1...n)
....
...
..
N1(1...n) N2(1...n) N3(1...n) N4(1...n) ... NN(1...n)说明:
A行有未知个元素,其中A行中的每个元素又会有未知个子元素。
而且现在也有未知个像A结构这样的行请问如果用ArrayList来存储这些元素,这段程序如何写呢? 或有无其它更好的办法!!!!???

解决方案 »

  1.   

    我现在是按这结构用ArrayList一层一层嵌套的方式来写的,但发生ArrayList中增加ArrayList元素时,后来的ArrayList元素会覆盖之前的ArrayList元素的问题。 如何解决呢?
      

  2.   

    这就是一个树,没什么难储存的,只要往ArrayList中添加ArrayList就可以了
      

  3.   

    后来的ArrayList元素会覆盖之前的ArrayList元素的问题???
    我刚试了下,没这种问题啊,可以正常的存,也可以正常的取
      

  4.   

    不行,还是会有这种问题,因为最里层A1(1...n)中的1到N个元素也是用一个ArrayList存储的,当这1到N个元素变动时,由于ArrayList用的是引用类型,会发生值会被最后一个存入的元素覆盖的问题...
      

  5.   

    我还是把代码贴出来吧,我简化了一下,大致如下:
    ArrayList arr = new ArrayList();
    ArrayList al = null;
    while(rs.Read())   //ADO记录集
    {
    int a,b;
    string c;
    al = new ArrayList();

    ArrayList ay = new ArrayList();
    a = rs.GetInt32(0);
    b = rs.GetString(1).Trim();
    c = rs.GetString(2).Trim();
    ay = GetSt(a,b,c);     //GetSt是一段算法,根据传入参数,返回一个ArrayList 

    CustomClass cc = new CustomClass(a,ay);
    al.Add(cc); ArrayList as = new ArrayList();
    a = rs.GetInt32(3);
    b = rs.GetString(4).Trim();
    c = rs.GetString(5).Trim();
    as = GetSt(a,b,c);     //GetSt是一段算法,根据传入参数,返回一个ArrayList 

    CustomClass cc = new CustomClass(a,ay);
    al.Add(cc); arr.Add(al);
    }
      

  6.   

    不理你你的变动是什么意思
    我觉得你的数据可以用下图表示
    太原王氏:
    ┳王柔 ━王机 ┳王默
    ┃       ┗王沈 ━王浚
    ┗王泽 ━王昶 ┳王浑 ┳王尚
            ┃   ┣王济
            ┃   ┣王澄
            ┃   ┗王汶
            ┣王深
            ┗王湛 ━王承 ━王述 ┳王坦之
                        ┗王祎之
    比如你修改了[王湛]这个节点时,包括[王承]的所有级子节点丢失的问题吧
    对于这个问题的解决方式,只能是你在修改[王湛]时,自已去处理他的所有子节点的问题,包括该复制的复制,该删除的删除,该增加的增加
    另外还一个提示,就是你不要把ArrayList,当成一个object**(指针的指针),必须用深层复制(Clone)
      

  7.   

    对,我也想到了,只引用的问题造成的,那请教,如何深层次的复制一个ArrayList及其其中的元素呢? 如果可以给个例子最好,谢谢!!!
      

  8.   

    Clone只是浅表副本,我搜了一下深表副本,关于这方面的资料好像很少
      

  9.   

    元素实现ICloneable接口
    ArrayList l1;......
    ArrayList l2;......
    foreach(ICloneable obj in l1)
    {
    l2.Add(obj.Clone());
    }
    不过我粗略的看了下,好象你的问题可能不是引用的原因引起的,今天太晚了,我明天好好分析一下吧,你先试试别的方法.
      

  10.   

    搞定了,确切不是引用的问题,是其中一个ArrayList定义到了循环的外面。结贴送分!