0

0

如何用 Go 语言将二维数组转化为类似 RDM 的目录树结构?

碧海醫心

碧海醫心

发布时间:2024-11-06 08:07:31

|

481人浏览过

|

来源于php中文网

原创

如何用 go 语言将二维数组转化为类似 rdm 的目录树结构?

二维数组转目录结构:一种便捷高效的 go 语言算法

想要实现类似 rdm 的目录树结构?但苦思冥想却难有突破?别担心,这篇文章将为你提供一个简洁高效的 go 语言解决方案,帮你在复杂的数据中理出清晰的条理。

任务:将给定的二维数组转换为如 rdm 般的目录树结构。数组中元素由冒号(:)分隔,表示目录层级关系。

示例输入:

values := []string{
    "answer:aa:bb",
    "answer:aa:cc",
    "question:book1",
    "question:book1:answer",
    "question:book1:answer:name1",
    "question:book1:answer:name2",
    "timeout_1",
    "timeout_2",
}

预期输出:

Kive
Kive

一站式AI图像生成和管理平台

下载
[
    {
        "name": "answer",
        "child": [
            {
                "name": "aa",
                "child": [
                    {
                        "name": "bb",
                        "value": "answer:aa:bb",
                        "child": []
                    },
                    {
                        "name": "cc",
                        "value": "answer:aa:cc",
                        "child": []
                    }
                ]
            }
        ]
    },
    {
        "name": "question",
        "child": [
            {
                "name": "book1",
                "value": "question:book1",
                "child": [
                    {
                        "name": "answer",
                        "child": [
                            {
                                "name": "name1",
                                "value": "question:book1:answer:name1",
                                "child": []
                            },
                            {
                                "name": "name2",
                                "value": "question:book1:answer:name2",
                                "child": []
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "name": "timeout_1",
        "value": "timeout_1",
        "child": []
    },
    {
        "name": "timeout_2",
        "value": "timeout_2",
        "child": []
    }
]

算法步骤:

  1. 初始化一个根节点映射表 root。
  2. 遍历给定的数组值。
  3. 将数组值按冒号分隔为键列表 keys。
  4. 按键列表的顺序遍历 root。如果遇到的键是现有子节点,则进入该子节点的映射表中;否则,创建一个新子节点并进入该子节点的映射表中。
  5. 对于键列表中的最后一个键(表示叶子节点),创建一个只包含名称和值的节点,并将其添加到当前子节点映射表中。

最终代码:

package main

import (
    "encoding/json"
    "strings"
)

func main() {
    root := make(map[string]Node)

    for _, value := range values {
        t := root
        keys := strings.Split(value, ":")
        l := len(keys)
        for i := 0; i < l-1; i++ {
            k := keys[i]
            if tm, has := t[k]; has {
                t = tm.Child
            } else {
                t[k] = Node{
                    Name:  k,
                    Child: map[string]Node{},
                }
                t = t[k].Child
            }
        }
        t[value] = Node{
            Name:  keys[l-1],
            Value: value,
            Child: nil,
        }
    }
    r, _ := json.Marshal(root)
    println(string(r))
}

type Node struct {
    Name  string
    Value string
    Child map[string]Node
}

运用此算法,你可以轻而易举地实现任意复杂性的二维数组到目录树的转换,并生成清晰、美观的树状结构。

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

404

2023.08.14

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

2

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

40

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

22

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

286

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

78

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

14

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

6

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号