包含切片的方法

新手上路,请多包涵

Go 中是否有类似于 slice.contains(object) 的方法,而无需搜索切片中的每个元素?

原文由 vosmith 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 626
2 个回答

Mostafa 已经 指出 这样的方法编写起来很简单,并且 mkb 提示您使用 sort 包中的二进制搜索。但是,如果您要进行大量此类包含检查,您也可以考虑改用地图。

使用 value, ok := yourmap[key] 成语检查特定映射键是否存在是微不足道的。由于您对该值不感兴趣,您还可以创建一个 map[string]struct{} 例如。使用空的 struct{} 的优点是它不需要任何额外的空间,并且 Go 的内部映射类型针对这种值进行了优化。因此, map[string] struct{} 是围棋世界中集合的流行选择。

原文由 tux21b 发布,翻译遵循 CC BY-SA 4.0 许可协议

不,这样的方法不存在,但写起来很简单:

 func contains(s []int, e int) bool {
    for _, a := range s {
        if a == e {
            return true
        }
    }
    return false
}

如果查找是您代码的重要组成部分,您可以使用地图,但地图也有成本。

原文由 Mostafa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题