Go 是否具有类似于 Python 的“if x in”构造?

新手上路,请多包涵

如何使用 Go 检查 x 是否在数组中 而不 遍历整个数组?语言是否有针对此的构造?

就像在 Python 中一样:

 if "x" in array:
  # do something

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

阅读 682
2 个回答

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

 func stringInSlice(a string, list []string) bool {
    for _, b := range list {
        if b == a {
            return true
        }
    }
    return false
}

或者在 Go 1.18 或更新版本中,您可以使用 slices.Contains (来自 golang.org/x/exp/slices)。

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

 visitedURL := map[string]bool {
    "http://www.google.com": true,
    "https://paypal.com": true,
}
if visitedURL[thisSite] {
    fmt.Println("Already been here.")
}

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

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

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

 func IsValidCategory(category string) bool {
    switch category {
    case
        "auto",
        "news",
        "sport",
        "music":
        return true
    }
    return false
}

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

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