go - 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
}
知道如何创建这棵树吗?
解决方案
问题,您是否需要对 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}
推荐阅读
- slack - slack api 将应用程序邀请到私人频道
- angular - API fetch 中的模板文字不会在 Angular 中传递数据
- python - 如何使用python将元素附加到for循环中的空列表?
- ios - iOS - 更新 CFBundleURLName 和 CFBundleURLSchemes
- windows - 如何在 UWP 应用程序中创建应用程序范围的键盘快捷键,以取代子 XAML 元素具有的任何按键处理程序?
- c# - 我可以使用 WrapPanel 来组织 ListView 组标题吗?
- javascript - 如何在 Wild Web Developer 中关闭提示
- android-studio - 当我在 feature_branch 中有很多提交时,如何解决与 android studio 中的开发分支的 rebase 冲突?
- git - gitignore 和 gitattributes 优先级
- html - 如何放置工具提示文本以使其在隐藏时不占用空间?