递归调用

func AndLevel(resource []Resource, parentid int64, level int) []Trees {
    //递归调用当所有的循环没有完成的时候是没有进行child的存值操作
    var len = 0
    var x = 0
    //这里是为了计算我存储数据的slice的长度
    for _, v := range resource {
        if v.ParentId == parentid {
            len = len + 1
        }
    }
    //这里根据上面取得的长度定义slice
    var tree []Trees = make([]Trees, len)
    if len != 0 {
        for k, v := range resource {
            //这里的k是不定的,所以需要定义另外的累加值进行累加计数
            //将计数累加放在这里会导致数组越界,因为没有满足条件,循环次数会超过上面定义的slice的长度
            if v.ParentId == parentid {
                k = x
                x = x + 1
                //满足条件赋值
                tree[k].Reskey = v.Reskey
                tree[k].IsFunction = v.IsFunction
                tree[k].Icon = v.Icon
                tree[k].Sort = v.Sort
                tree[k].Level = level
                //下级菜单的个数不定所以这里更改id值和层级 循环再次调用自己
                child := AndLevel(resource, v.ID, level+1)
                //将取出来的值赋值给子项
                tree[k].Children = child
            }
        }
    }
    return tree
}

  

posted @ 2017-10-11 14:58 黑手党老k 阅读(...) 评论(...) 编辑 收藏