ZBLOG

golang 将list转换为tree结构 请以权限为例

假设我们有一个结构体Permission,包含了权限的ID和父级ID。我们想要将这个权限列表转换成一棵树形结构,其中每个节点表示一个权限对象。

type Permission struct {
    ID       int
    ParentID int
    // other fields
}

首先,我们需要定义一个带有子节点切片的树形结构:

type TreeNode struct {
    Permission *Permission
    Children   []*TreeNode
}

然后,我们可以定义一个函数来递归地构建这棵树:

func buildTree(permissions []*Permission, parentID int) []*TreeNode {
    var nodes []*TreeNode

    for _, p := range permissions {
        if p.ParentID == parentID {
            node := &TreeNode{Permission: p}
            children := buildTree(permissions, p.ID)
            node.Children = children
            nodes = append(nodes, node)
        }
    }

    return nodes
}

该函数接受一个权限列表和一个父级ID作为参数,并返回由TreeNode组成的切片。它遍历所有具有指定父级ID的权限并将其添加到当前节点的子节点中。然后,对于每个子节点,它递归调用自身来构建子树。

最后,我们可以使用以下代码将权限列表转换为树:

func main() {
    // 从数据库或其他来源获取权限列表
    permissions := getPermissions()

    // 将权限列表转换为树形结构
    treeNodes := buildTree(permissions, 0)

    // 打印树形结构
    printTree(treeNodes, 0)
}

func printTree(nodes []*TreeNode, depth int) {
    for _, node := range nodes {
        fmt.Printf("%s%d\n", strings.Repeat(" ", depth), node.Permission.ID)
        printTree(node.Children, depth+1)
    }
}

在这个例子中,我们使用getPermissions()函数来获取权限列表。然后,我们将其传递给buildTree()函数,并指定父级ID为0,因为根节点没有父级。最后,我们使用printTree()函数打印树形结构。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6133

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?