首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Go有没有类似Python的"if x in“结构?

Go有没有类似Python的"if x in“结构?
EN

Stack Overflow用户
提问于 2013-03-10 23:15:57
回答 7查看 316.6K关注 0票数 384

如果没有对整个数组进行迭代,我如何使用Go检查数组中是否有x?这种语言有构造性吗?

像Python一样:if "x" in array: ...

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-03-10 23:36:14

在Go中没有内置的运算符。您需要遍历数组。您可以编写自己的函数来执行此操作,如下所示:

代码语言:javascript
复制
func stringInSlice(a string, list []string) bool {
    for _, b := range list {
        if b == a {
            return true
        }
    }
    return false
}

如果您希望能够在不遍历整个列表的情况下检查成员,则需要使用映射而不是数组或切片,如下所示:

代码语言:javascript
复制
visitedURL := map[string]bool {
    "http://www.google.com": true,
    "https://paypal.com": true,
}
if visitedURL[thisSite] {
    fmt.Println("Already been here.")
}
票数 450
EN

Stack Overflow用户

发布于 2015-11-26 07:45:39

如果列表包含静态值,则另一种解决方案。

例如:检查有效值列表中的有效值:

代码语言:javascript
复制
func IsValidCategory(category string) bool {
    switch category {
    case
        "auto",
        "news",
        "sport",
        "music":
        return true
    }
    return false
}
票数 133
EN

Stack Overflow用户

发布于 2015-10-25 05:03:52

这是从“在Go中编程:为21世纪创建应用程序”一书中的一句话:

使用像这样的简单线性搜索的

是未排序数据的唯一选择,并且对于小切片(最多数百个项)也很好。但对于较大的切片-特别是如果我们重复执行搜索-线性搜索的效率非常低,平均每次需要比较一半的项目。

Go提供了一个使用二进制搜索算法的sort.Search()方法:每次只需要比较log2(n)项(其中n是项数)。正确地说,1000000个项目的线性搜索平均需要500000个比较,最坏的情况是1000000个比较;二进制搜索最多需要20个比较,即使在最坏的情况下也是如此。

代码语言:javascript
复制
files := []string{"Test.conf", "util.go", "Makefile", "misc.go", "main.go"}
target := "Makefile"
sort.Strings(files)
i := sort.Search(len(files),
    func(i int) bool { return files[i] >= target })
if i < len(files) && files[i] == target {
    fmt.Printf("found \"%s\" at files[%d]\n", files[i], i)
}

https://play.golang.org/p/UIndYQ8FeW

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

https://stackoverflow.com/questions/15323767

复制
相关文章

相似问题

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