我在閱讀清單中有一小段文章。每篇文章都有屬性「FeedURL」,其中包含文章來源Feed的URL。當我從訂閱源取消訂閱時,我希望能夠刪除包含該訂閱源網址的每篇文章。如何修改for循環中的切片?
type Article struct {
FeedURL string
URL string // should be unique
// ... more data
}
func unsubscribe(articleList []Article, url string) []Article {
// how do I remove every Article from articleList that contains url?
}
func main() {
myArticleList := []Article{
Article{"http://blog.golang.org/feed.atom", "http://blog.golang.org/race-detector"},
Article{"http://planet.python.org/rss20.xml", "http://archlinux.me/dusty/2013/06/29/creating-an-application-in-kivy-part-3/"},
Article{"http://planet.python.org/rss20.xml", "http://feedproxy.google.com/~r/cubicweborg/~3/BncbP-ap0n0/2957378"},
// ... much more examples
}
myArticleList = unsubscribe(myArticleList, "http://planet.python.org/rss20.xml")
fmt.Printf("%+v", myArticleList)
}
解決此問題的有效方法是什麼?
起初,我的代碼看起來像這樣取消:
func unsubscribe(articleList []Article, url string) []Article {
for _, article := range articleList {
if article.FeedURL == url {
articleList = append(articleList[:i], articleList[i+1:]...)
}
}
return articleList
}
但後來我意識到,這將改變切片,使for循環不可預知的。
什麼是實現這一目標的有效方法?
Re:_「但後來我意識到這會改變切片,並使for循環變得不可預知。」_循環_is_完全可預測。在執行範圍語句之前,範圍表達式僅計算一次。 – zzzz