読書リストに記事の一部があります。各 Article には、記事の元となったフィードの URL を持つ "FeedURL" 属性があります。フィードの購読を解除するときに、そのフィードの URL を含むすべての記事を削除できるようにしたいと考えています。
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 ループが予測不能になることに気付きました。
これを達成するための効率的できれいな方法は何ですか?