首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >包含切片的方法

包含切片的方法
EN

Stack Overflow用户
提问于 2012-05-08 00:35:38
回答 14查看 403.3K关注 0票数 316

有没有类似于slice.contains(object)方法,而不必搜索切片中的每个元素?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-05-08 01:14:16

Mostafa已经指出,这样的方法编写起来很简单,mkb给了您一个提示,让您使用排序包中的二进制搜索。但是,如果您要执行大量此类包含检查,则还可以考虑使用map。

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

票数 299
EN

Stack Overflow用户

发布于 2012-05-08 00:56:59

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

代码语言:javascript
复制
func contains(s []int, e int) bool {
    for _, a := range s {
        if a == e {
            return true
        }
    }
    return false
}

如果查找是代码的重要部分,则可以使用映射,但映射也有成本。

票数 260
EN

Stack Overflow用户

发布于 2019-09-20 18:46:15

The sort排序如果您的切片已排序或您希望对其进行排序,package将提供构建块。

代码语言:javascript
复制
input := []string{"bird", "apple", "ocean", "fork", "anchor"}
sort.Strings(input)

fmt.Println(contains(input, "apple")) // true
fmt.Println(contains(input, "grow"))  // false

...

func contains(s []string, searchterm string) bool {
    i := sort.SearchStrings(s, searchterm)
    return i < len(s) && s[i] == searchterm
}

SearchString承诺会回来the index to insert x if x is not present (it could be len(a)),所以检查它会显示字符串是否包含排序后的切片。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10485743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档