gpt4 book ai didi

go - Go 中的扁平嵌套集到嵌套结构

转载 作者:数据小太阳 更新时间:2023-10-29 03:23:35 26 4
gpt4 key购买 nike

也许是今天晚些时候,这让我的大脑融化了。

我正在尝试将嵌套集的平面列表转换为多维嵌套数组。

我有一堆结构化的 CMS 条目,如下所示:

entries := []TreeEntry{
{
Slug: "about-us",
Title: "About us",
Left: 2,
Right: 11,
Level: 1,
},
{
Slug: "more-about-us",
Title: "More about us",
Left: 3,
Right: 6,
Level: 2,
},
{
Slug: "even-more-about-us",
Title: "Even more about us",
Left: 4,
Right: 5,
Level: 3,
},
{
Slug: "contact-us",
Title: "Contact us",
Left: 2,
Right: 7,
Level: 1,
},
}

我想按如下方式展开它们:

entries := []TreeEntry{
{
Slug: "about-us",
Title: "About us",
Left: 2,
Right: 11,
Level: 1,
Children: []TreeEntry{
{
Slug: "more-about-us",
Title: "More about us",
Left: 3,
Right: 6,
Level: 2,
Children: []TreeEntry{
{
Slug: "even-more-about-us",
Title: "Even more about us",
Left: 4,
Right: 5,
Level: 3,
},
},
},
},
},
{
Slug: "contact-us",
Title: "Contact us",
Left: 2,
Right: 7,
Level: 1,
},
}

这里的目标最终是返回一个菜单结构,其中的 slug 适本地接触在一起,但出于某种原因,我就是无法在 Go 中实现这一目标。

谁能指出我正确的方向?

编辑:添加了我尝试过的无效示例:

https://play.golang.org/p/oKWo21lu__7

结果永远不会添加到第一级以下。

谢谢,J

最佳答案

事实证明,我需要使用指针来保存子条目。以下设置有效:

type TreeEntry struct {
Id int64 `db:"elementId" json:"id"`
Slug string `db:"slug" json:"slug"`
Title string `db:"title" json:"title"`
Left int `db:"lft" json:"-"`
Right int `db:"rgt" json:"-"`
Level int `db:"level" json:"-"`
Children []*TreeEntry `json:"children"`
}

func (t *TreeEntry) AddNestedChild(newEntry TreeEntry) {
// If this child is one level below the current node, just add it here for now
if newEntry.Level == t.Level+1 {
t.Children = append(t.Children, &newEntry)
} else {
// Loop through the children and see if it fits anywhere
for _, child := range t.Children {
if newEntry.Left > child.Left && newEntry.Right < child.Right {
child.AddNestedChild(newEntry)
break
}
}
}
}

关于go - Go 中的扁平嵌套集到嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com