go数组转tree

2023-10-27

数组转 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
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go数组转tree 的相关文章

  • go struct{} 空结构体的特点和作用

    空结构体的特点和作用 参考代码 package main import fmt unsafe func main empStruct 空结构体的实例和作用 func empStruct 空结构体的特点 1 不占用内存 2 地址不变 var
  • Go的并发的退出

    有时候我们需要通知goroutine停止它正在干的事情 比如一个正在执行计算的web服务 然而它的客户端已经断开了和服务端的连接 Go语言并没有提供在一个goroutine中终止另一个goroutine的方法 由于这样会导致goroutin
  • 【Golang入门】Golang第一天心得

    生活所迫 入门一下Go 很奇葩的第一点 接口 package main import fmt 定义一个接口 type Shape interface Area float64 定义一个矩形类型 type Rectangle struct W
  • go踩坑——no required module provides package go.mod file not found in current directory or any parent

    背景 准备运行下面代码 package main import github com gin gonic gin func main 创建一个默认的路由引擎 r gin Default GET 请求方式 hello 请求的路径 当客户端以G
  • 七. go 常见数据结构实现原理之 反射

    目录 一 golang 是如何实现反射的 如何比较两个对象完全相等 一 golang 是如何实现反射的 参考博客Go 语言问题集 Go Questions Go 语言在 reflect 包里定义了各种类型 实现了反射的各种函数 通过它们可以
  • golang之跨语言ipc通信

    1 golang之跨语言ipc通信 文章目录 1 golang之跨语言ipc通信 1 1 unix domain Socket unix域套接字 介绍 1 2 IPC SOCKET通信 1 2 1 函数及地址定义介绍 1 2 2 UNIX
  • Go项目部署及所遇问题

    小聊 本次小白给大家带来Golang项目部署操作以及个人所遇问题和解决它们的方法 依然是一边实操演示一边写文稿 如遇相似问题却存有疑惑可留言 开发环境是Window 部署环境是Linux 开发工具为GoLand 部署服务器为阿里云 1 打包
  • 带你使用Golang快速构建出命令行应用程序

    在日常开发中 大家对命令行工具 CLI 想必特别熟悉了 如果说你不知道命令工具 那你可能是个假开发 每天都会使用大量的命令行工具 例如最常用的Git Go Docker等 不管是做技术开发还是业务开发 都会有开发命令行程序的场景 例如如果是
  • go语言基础-----03-----流程控制、函数、值传递、引用传递、defer函数

    1 流程控制 这里只讲 for range 语句 这个关键字 主要用于遍历 用来遍历数组 slice map chan 例如 package main import fmt func main str hello world 中国 for
  • Go切片排序

    Go 语言标准库提供了sort包 用于对切片和用户定义的集合进行排序 具体示例如下 基本排序 package main import fmt sort func main float 从小到大排序 f float64 5 2 1 3 0 7
  • Golang连接Jenkins获取Job Build状态及相关信息

    文章目录 1 连接Jenkins 2 controller 3 module 4 router 5 效果展示 第三方包 gojenkins 方法文档 gojenkins docs 实现起来很简单 利用第三方库 连接jenkins 调用相关方
  • Golang协程与通道整理

    协程goroutine 不由OS调度 而是用户层自行释放CPU 从而在执行体之间切换 Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之 不通过OS进行切换 自行切换 系统运行开支大大降低 通道channel 并发编
  • goland环境配置

    goland modules环境配置 下载和安装goland 环境配置 配置环境变量GOPATH 配置go modules GOPROXY代理的系统变量 工程目录中新建三个工作目录 goland中启用go modules 新建一个go程序
  • 深入理解 Go 语言中的接口(interface)

    一 GoLang 接口的定义 1 GoLang 中的接口 在 Go 语言中接口 interface 是一种类型 一种抽象的类型 接口 interface 定义了一个对象的行为规范 只定义规范不实现 由具体的对象来实现规范的细节 实现接口的条
  • 有哪些不错的 Golang 开源项目?

    目前人在字节做 Go 开发 寻找 Golang 开源项目学习目的可能是 想学习或者提高自己对 Go 项目的组织和编排能力 想学习 Go 项目的框架设计 想在一些 Go 语法上细节的优化和进阶 我推荐两个项目 一 tinode 这是一个开源的
  • 【golang】go执行shell命令行的方法( exec.Command )

    所需包 import os exec cmd 的用法 cmd exec Command ls lah ls是命令 后面是参数 e cmd Run 多个参数的要分开传入 如 ip link show bond0 cmd
  • 协程-单线程内的异步执行

    1 仿协程实例 不同事件依次顺序执行 coding utf 8 import time def calculate 1 step event name for index in range step print This is s even
  • go语言实现文件夹上传前后端代码案例

    go语言实现文件夹上传前后端代码案例 前端用于上传的测试界面 如果上传的文件夹有子文件要遍历子文件夹创建出子文件夹再进行拷贝 需要获取文件名和对应的路径 将文件的相对路径和文件对象添加到FormData中 这几行代码很关键 for let
  • go开发--操作mysql数据库

    在 Go 中访问 MySQL 数据库并进行读写操作通常需要使用第三方的 MySQL 驱动 Go 中常用的 MySQL 驱动有 github com go sql driver mysql 和 github com go xorm xorm
  • go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

    carbon 是一个轻量级 语义化 对开发者友好的 golang 时间处理库 支持链式调用 目前已被 awesome go 收录 如果您觉得不错 请给个 star 吧 github com golang module carbon gite

随机推荐

  • 【Transformer】2、ViT:An image is worth 16x16: transformers for image recognition at scale

    文章目录 一 背景和动机 二 方法 三 效果 四 Vision Transformer 学习到图像的哪些特征了 五 代码 代码链接 https github com lucidrains vit pytorch 论文连接 https ope
  • Android Listview 以及list view适配器

    Listview 相关监听事件以及滑动按钮 适配器 是来连接数据源和图形化界面的桥梁 数组适配器arrayadapter 集合和数组 格式简单 简单适配器simpleadapter格式复杂 使用过程 星舰 添加数据元到适配器 试图展示 si
  • JAVA中scanner方法详解

    Scanner 是 Java 中的一个比较重要的类 它的作用是用来从控制台读取输入的 它可以接收字符串 整数等类型的输入 使用方法如下 1 使用 Scanner 对象 创建 Scanner 对象并传入要接收输入的字符串 Scanner in
  • 图像边缘特征

    图像边缘是图像的重要特征 是图像中特性 如像素灰度 纹理等 分布的不连续处 图像周围特性有阶跃变化或屋脊状变化的那些像素集合 图像的边缘部分集中了图像的大部分信息 一幅图像的边缘结构与特点往往是决定图像特质的重要部分 图像边缘的另一个定义是
  • scp命令传输出现ssh: Could not resolve hostname错误

    ssh Could not resolve hostname xxxxx Temporary failure in name resolution 原因是docker导出的镜像需要离线导入 在命名的时候根据docker镜像命名带上了 导致
  • 海思3559A上编译libjpeg-turbo源码操作步骤

    1 从https github com libjpeg turbo libjpeg turbo releases tag 2 0 2 下载libjpeg turbo 2 0 2版本 2 脚本build sh内容如下 cmake DCMAKE
  • Redis五种数据结构及常用操作指令、Redis在JAVA中如何封装使用

    由于在博主的博客专栏 杂货铺实战 中的杂货铺项目中用到了Redis 那么本篇博文就针对Redis的五种数据结构以及如何在JAVA中封装使用做一个简单的介绍 文章目录 数据结构 string字符串 string字符串简介 string字符串在
  • nginx代理常见问题

    1 http200 但是返回We re sorry but XXXX doesn t work properly without JavaScript enabled Please enable it to continue 项目1 可能原
  • React.js 之筛选篇

    span style font size 14px 这个框架有听过好几次了 但自己没实现过 今天终于自己学了下 模仿写了这个过滤 妙味视频里面的 目前遇到的情况是用babel会丢失代码提示 但在浏览器中可视 划分组件 组件链接 span
  • 交叉熵损失函数优缺点_如何简单通俗的理解交叉熵损失函数?

    前面小编给大家简单介绍过损失函数 今天给大家继续分享交叉熵损失函数 直接来看干货吧 一 交叉熵损失函数概念 交叉熵损失函数CrossEntropy Loss 是分类问题中经常使用的一种损失函数 公式为 接下来了解一下交叉熵 交叉熵Cross
  • 多线程任务Rollback

    问题 多线程任务 一个任务执行错误 其他任务应该同步取消 1 主线程监视 主线程监视任务线程 当一个任务线程出现执行错误时 直接调用System exit 0 结束程序 任务线程代码 package com example thread c
  • 小程序服务器角色,小程序在我们的生活中扮演什么角色?

    原标题 小程序在我们的生活中扮演什么角色 我们给大家讲过关于小程序的相关问题 还有互联网 的相关问题 相信大家还不知道这两者之间的关系 今天我们给大家讲解一下关于小程序与互联网 的关联 我们再来回忆以下关于小程序的概念 对于用户来说 小程序
  • 应用角度看kafka的术语和功能

    kafka的术语 Terminology Topic 和Consumer Group Topic 每条发布到 Kafka 集群的消息都有一个类别 这个类别被称为 Topic 物理上不同 Topic 的消息分开存储 逻辑上一个 Topic 的
  • 入门必备小游戏之炸金花

    游戏的规则 一付扑克牌 去掉大小王 每个玩家发3张牌 最后比大小 看谁赢 牌型 豹子 三张一样的牌 如3张6 分值100 顺金 又称同花顺 即3张同样花色的顺子 如红桃 5 6 7 分值75 顺子 又称拖拉机 花色不同 但是顺子 如红桃5
  • 差分+差分矩阵(更适合新手宝宝体质)

    快速掌握差分以及差分矩阵 文章目录 快速掌握差分以及差分矩阵 前言 差分 差分的定义 官方解释 差分自定义 跟前缀和放在一起理解 差分数组的应用 题目描述 差分矩阵 与前缀和矩阵进行比较 差分矩阵定义 官方解释 自定义 修改操作 跟前缀和对
  • openGauss学习笔记-43 openGauss 高级数据管理-事件触发器

    文章目录 openGauss学习笔记 43 openGauss 高级数据管理 事件触发器 43 1 语法格式 43 2 参数说明 43 3 示例 openGauss学习笔记 43 openGauss 高级数据管理 事件触发器 触发器会在指定
  • 物联网毕业设计 基于STM32的环境质量监测系统(源码+原理图+论文)

    文章目录 0 前言 1 设计架构 功能设计 2 原理图 3 软件设计 4 实现效果 5 相关代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟
  • 傻白入门芯片设计,三大基本定律(十)

    1 摩尔定律 Moore s Law 集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍 换言之 处理器的性能大约每两年翻一倍 同时价格下降为之前的一半 2 登纳德缩放定律 Dennard Scaling 随着晶体管尺
  • 2023.3.17

    Goby预置了最具攻击效果的漏洞引擎 覆盖Weblogic Tomcat等最严重漏洞 每天从互联网 如CVE 会产生大量的漏洞信息 我们筛选了会被用于真实攻击的漏洞进行每日更新 Goby也提供了可以自定义的漏洞检查框架 发动了互联网的大量安
  • go数组转tree

    数组转 tree目前发现就二种方式 go实现了两种 1 递归模式 2 双重循环 初始化数据 List 结构体 type List struct Name string json name Id int json id Pid int jso