在做递归循环数据的时候遇到这么一个问题public void BuildTree(StringBuild sb,id)
{
    logics.query[] querys = logics.query.loadAllFromDatabase("where parent="+id+"");
    sb.append("<div>");
    if(querys.length > 0)
    {
      foreach(logics.query querychild in querys)
       {
        sb.append(" <a>"+ querychild.id +"</a>");
        
        //继续调用
        BuildTree(sb,querychild.id);
        }
    }
    sb.append("</div>");
}上面这个方法得到的数据结果将是<div>
   <a>1</a>
   <div>
      <a>11</a>
      <a>22></a>
   </div>
</div>然而我想要的输出结果,父和子是同级的,如下:<div>
   <a>1</a>
</div>
<div>
   <a>11</a>
   <a>22</a>
</div>

解决方案 »

  1.   

    public void BuildTree(List<string> list, string id)
    {
        logics.query[] querys = logics.query.loadAllFromDatabase("where parent="+id+"");
        if (querys.length > 0)
        {
          foreach (logics.query querychild in querys)
          {
             list.Add(querychild.id);
               BuildTree(list, querychild.id);
          }
        }
    }调用
    var list = new List<string>();
    BuildTree(list, rootid);
    foreach (var item in list)
    {
        sb.append("<div>");
        sb.append("<a>"+ item +"</a>");
        sb.append("</div>");
    }
      

  2.   


    谢谢楼上的这个思想,这个方法是解决不了问题的, 我最终的目的是这样的规则
    <div id="0">
       <a>1</a>
    </div>
    <div id="1"> //这里的id=1,就是第一个a里面的1
       <a>11</a>
       <a>22</a>
    </div>
    <div id="11">//相应的这个11就是第二个div里第一个锚点里的11
       <a>111</a>
    </div>最终我是想实现成这样的。
      

  3.   

    public void BuildTree(List<Tuple<string, string>> list, string id)
    {
       logics.query[] querys = logics.query.loadAllFromDatabase("where parent="+id+"");
       if (querys.length > 0)
       {
       foreach (logics.query querychild in querys)
       {
       list.Add(new Tuple<string, string>(id, querychild.id));
       BuildTree(list, querychild.id);
       }
       }
    }
    调用
    var list = new List<Tuple<string, string>>();
    BuildTree(list, rootid);
    foreach (var item in list)
    {
       sb.append("<div> id=" item.Item1+ );
       sb.append("<a>"+ item.Item2 +"</a>");
       sb.append("</div>");
    }
      

  4.   

    类似于:public void BuildTree(StringBuild sb,id)
    {
        logics.query[] querys = logics.query.loadAllFromDatabase("where parent="+id+"");
        sb.append("<div>");
        foreach(logics.query querychild in querys)
         {
            sb.append(" <a>"+ querychild.id +"</a>");
         }
        sb.append("</div>");
        foreach(logics.query querychild in querys)
         {
            BuildTree(sb,querychild.id);
         }
        }
    }
      

  5.   

    看起来其实还是比较简单的,就是先要输出</div>,然后才递归。就算法表达上来说(而不是实际堆栈深度之类的运行时考虑),没有什么循环,任何循环都可以以递归的方式表达。
      

  6.   

    logics.query[] querys = logics.query.loadAllFromDatabase("where parent="+id+"");
        sb.append("<div>");
        if(querys.length > 0)
        {
          foreach(logics.query querychild in querys)
           {
            sb.append(" <a>"+ querychild.id +"</a>");
              BuildTree(sb,querychild.id);//可单步看值,第二次就<div> a 11
     
           }
        }
        sb.append("</div>");
    =>
    logics.query[] querys = logics.query.loadAllFromDatabase("where parent="+id+"");
        sb.append("<div>");
        if(querys.length > 0)
        {
          foreach(logics.query querychild in querys)
           {
            sb.append(" <a>"+ querychild.id +"</a>");
             
           } sb.append("</div>");
    foreach(logics.query querychild in querys)
           {
              BuildTree(sb,querychild.id);//可单步看值,第二次就<div> a 11
     
           }    }
       }
      

  7.   

    再次感谢 caozhy , sp1234, wuyq11