您的位置 首页 知识分享

二维数组如何转化为目录树结构?

二维数组转目录结构算法 要创建一个类似 rdm 的目录树,需要将给定的二维数组转换为一个层次结构。以下算法可以…

二维数组如何转化为目录树结构?

二维数组转目录结构算法

要创建一个类似 rdm 的目录树,需要将给定的二维数组转换为一个层次结构。以下算法可以高效地执行此操作:

  1. 创建一个空映射,这将是树的根节点。
  2. 对于数组中的每个值:

    • 将该值拆分为带有冒号 “:” 分隔符的密钥。
    • 从根节点开始,跟随密钥遍历树。
    • 对于遇到的每个密钥(除最后一个):

      • 如果存在子节点,则将子节点映射为当前节点。
      • 如果子节点不存在,则创建一个带有空子节点映射的新节点。
    • 将最后一个键作为叶子节点添加到当前节点的子节点映射中。

以下 go 代码实现了此算法:

package main  import (     "encoding/json"     "strings" )  var 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", }  type Node struct {     Name  string     Value string     Child map[string]Node }  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             }         }         // 为最后一个 key 时 单独处理成叶子节点         t[value] = Node{             Name:  keys[l-1],             Value: value,             Child: nil,         }     }     r, _ := json.Marshal(root)     println(string(r)) }
登录后复制

以上就是二维数组如何转化为目录树结构?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/4578.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部