我试图使自己熟悉Go,因此尝试实现一些搜索功能,但在文档中查找容器类型,没有一个内置类型实现contains方法。我是否缺少某些东西,如果没有,我该如何进行会员资格测试?我必须实现自己的方法还是必须遍历所有元素。如果是这样,那么针对容器类型省略此基本方法的理由是什么?
3 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
使用容器/列表包,您可以编写自己的循环来搜索内容。软件包中未提供此功能的原因可能就像Dystroy所说的那样,将隐藏O(n)操作。
您无法添加方法,因此只需编写一个循环。
for e := l.Front(); e != nil; e = e.Next() {
data := e.Value.(dataType) // type assertion
if /* test on data */ {
// do something
break
}
}
它很简单,并且O(n)的复杂性很明显。
在Go附带的支持搜索的数据结构的回顾中,请不要错过sort包。那里的函数允许切片以O(n log(n))排序,然后以O(log(n))时间进行二进制搜索。
最后,正如Daniel所建议的,请考虑使用第三方软件包。对于容器类型,有一些流行和成熟的软件包。
- 3 回答
- 0 关注
- 241 浏览
添加回答
举报
0/150
提交
取消
