我的阅读清单中有一些文章。每篇文章都有属性“FeedURL”,该属性包含文章来源的提要的 URL。当我取消订阅某个提要时,我希望能够删除包含该提要 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 循环不可预测。实现这一目标的有效且漂亮的方法是什么?
2 回答
MYYA
TA贡献1868条经验 获得超4个赞
PeterSO 的回答是高效完成工作。
但是,我可能会采用这样的简单方法
func unsubscribe(articleList []Article, url string) (filtered []Article) {
filtered = articleList[:0] // optional. reuses already-allocated memory.
for _, article := range articleList {
if article.FeedURL != url {
filtered = append(filtered, article)
}
}
return
}
阅读和理解只需大约两秒钟。
这个想法也适用于指向文章的指针,就像 PeterSO 所说,如果你的文章结构很大,那可能是一件好事。
- 2 回答
- 0 关注
- 222 浏览
添加回答
举报
0/150
提交
取消