首页 > 解决方案 > Go中的树引用父亲ID

问题描述

我正在尝试在 Go 中创建一棵树,但我在创建这棵树时遇到了一点问题,我从 .txt 中接收到无序的名称:

SESSION01.5
SESSION01
SESSION02.5
SESSION01.5.5
SESSION02

它应该是:

SESSION01 -> SESSION01.5 -> SESSION01.5.5
SESSION02 -> SESSION02.5

我要添加数据库,因为我需要将父亲的 id 在我的 struct Session 中设置为:

type Session struct {
  ID *int64
  Name *string
  SessionFatherID *int64
}

知道如何创建这棵树吗?

标签: go

解决方案


问题,您是否需要对 Session 结构进行参考。如果写成这样就更好了:

type Session struct {
   ID int64
   Name string
   SessionFatherID int64
}

最简单的做法是将其读入以Name为键的映射,然后执行第二次传递以关联SessionFatherID(也称为父 ID)。

由于这感觉像是家庭作业,因此我将避免“为您编写解决方案”。您的程序应如下所示:

第一步:打开输入文件

第 2 步:将输入文件扫描到会话映射中:sessions := map[string]*Session{}

entry := Session{ID: id, Name: name}
session[entry.Name] = &entry

第 3 步:迭代会话

  • 解析会话名称以获取它的父级
  • 在地图中查找父级及其 ID
  • 将条目设置为具有新的SessionFatherID

     if parent, found := sessions[parentSessionName]; found {
            value.SessionFatherID = parent.ID
     }
    
  • 这是有效的,因为映射指向 Session 的指针,您可以更改值

第 4 步:输出结果

给定数据集的简单结果可能如下所示:

&{1 SESSION01 0}
&{2 SESSION02.5 4}
&{3 SESSION01.5.5 0}
&{4 SESSION02 0}
&{0 SESSION01.5 1}

推荐阅读