亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用遞歸函數迭代遞歸結構

使用遞歸函數迭代遞歸結構

Go
胡子哥哥 2023-06-26 17:48:27
我有以下結構    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 可以在父 URL 的頁面上找到。由于某些未知的原因findURLItemRecursive是有缺陷的。問題是我無法UrlItem在第二級附加更多。我的意思是我可以創建該項目,為該項目Root創建切片,但是我無法創建嵌套切片。所以我不能超過第一層。UrlsRoot我想知道 Go 中的函數是否findURLItemRecursive有任何我無法發現的明顯錯誤。
查看完整描述

1 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

我認為這應該對你有用。


    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

    }


查看完整回答
反對 回復 2023-06-26
  • 1 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號