gpt4 book ai didi

go - 使用递归函数迭代递归结构

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

我有以下结构

    type Sitemap struct {
XMLName xml.Name `xml:"urlset"`
Namespace string `xml:"xmlns,attr"`
Schema string `xml:"xmlns:xsi,attr"`
SchemaLocation string `xml:"xsi:schemaLocation,attr"`
Root *URLItem
}

type URLItem struct {
XMLName xml.Name `xml:"url"`
Loc string `xml:"loc"`
LastMod string `xml:"lastmod,omitempty"`
Urls []*URLItem
}

func (s *Sitemap) AddURL(key string, url string) {
node, found := findURLItemRecursive(s.Root, key)
if found {
node.Urls = append(node.Urls, &URLItem{Loc: url})
}
}


func findURLItemRecursive(urlItem *URLItem, key string) (*URLItem, bool) {
if urlItem.Loc == key {
return urlItem, true
}

for _, urlItem := range urlItem.Urls {
return findURLItemRecursive(urlItem, key)
}

return nil, false
}

其中 key 是父 URL,url 是链接到父 URL 的子 URL,因为子 URL 位于 parent 。

由于某些未知原因,findURLItemRecursive 有问题。

问题是我无法在第二级附加更多 UrlItem(s)。

我的意思是我可以创建 Root 项,为 Root 项创建 Urls slice ,但我无法创建嵌套 slice 。所以我不能超过第一级。

我想知道函数 findURLItemRecursive 在 Go 中是否有任何我无法发现的明显错误。

最佳答案

我认为这应该适合您。

    type Sitemap struct {
XMLName xml.Name `xml:"urlset"`
Namespace string `xml:"xmlns,attr"`
Schema string `xml:"xmlns:xsi,attr"`
SchemaLocation string `xml:"xsi:schemaLocation,attr"`
Root *URLItem
}

type URLItem struct {
XMLName xml.Name `xml:"url"`
Loc string `xml:"loc"`
LastMod string `xml:"lastmod,omitempty"`
Urls []*URLItem
}

func (s *Sitemap) AddURL(key string, url string) {
node, found := findURLItemRecursive(s.Root, key)
if found {
node.Urls = append(node.Urls, &URLItem{Loc: url})
}
}


func findURLItemRecursive(urlItem *URLItem, key string) (*URLItem, bool) {
if urlItem.Loc == key {
return urlItem, true
}

for _, urlItem := range urlItem.Urls {
item, found := findURLItemRecursive(urlItem, key)
if found {
return item, found
}
}

return nil, false
}

关于go - 使用递归函数迭代递归结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56826731/

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