go数组转tree

数组转 tree目前发现就二种方式,go实现了两种

1. 递归模式

2. 双重循环

初始化数据 


// List 结构体
type List struct {
    Name     string `json:"name"`
    Id       int    `json:"id"`
    Pid      int    `json:"pid"`
    Children []List `json:"children"`
}

// 数据
var data = []List{
    {Name: "李四", Id: 2, Pid: 0},  //  []
    {Name: "王五", Id: 3, Pid: 0},  // []
    {Name: "赵六", Id: 4, Pid: 3},  // []
    {Name: "吗六", Id: 9, Pid: 3},  // []
    {Name: "张三", Id: 7, Pid: 9},  // []
    {Name: "张五", Id: 10, Pid: 4}, // []
}

1. 递归模式

/**
 * 递归模式,数组转tree
 * @param arr 目标数组
 * @param pid 第一级 目标id
 * @returns {*[]} tree
 * @constructor
 */

func ArrayToTree(arr []List, pid int) []List {
    var newArr []List
    for _, v := range arr {
        if v.Pid == pid {
            v.Children = ArrayToTree(arr, v.Id)
            newArr = append(newArr, v)
        }
    }
    return newArr
}

2. 双重for循环模式

/**
 * 双重for循环模式,数组转tree
 * @param arr
 * @returns {any}
 * [
 *   { name: '李四', id: 2, pid: 0 },
 *   { name: '王五', id: 3, pid: 0, children: [ [Object], [Object] ] }
 * ]
 */

 func arrToTreeArray(arr []List, pid int) []List {
    var res = arr
    for i, item := range arr {
        var newArr = []List{}
        for _, v := range arr {
            if item.Id == v.Pid {
                newArr = append(newArr, v)
            }
        }
        res[i].Children = newArr
    }
    var result []List
    for _, item := range res {
        if item.Pid == pid {
            result = append(result, item)
        }
    }
    return result
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值