登录
首页 >  Golang >  Go问答

如何查看地图键是否包含某些字符串?

来源:stackoverflow

时间:2024-03-16 14:15:35 496浏览 收藏

**摘要:** 在 Go 语言中,判断地图键是否包含特定字符串时,直接迭代键值对是最有效的方法。通过使用 `strings.Contains()` 函数,可以检查键中是否包含指定字符串。这种方法比提取键到切片并进行逐个搜索更有效,因为它避免了不必要的复制和额外内存分配。该方法对于包含搜索特别有用,因为它避免了使用更复杂的trie或前缀树数据结构。

问题内容

假设我有一段字符串,例如:

fruits := {"apple", "orange", "banana"}

和一张像

这样的地图
box:= map[string]int{
    "chicken": 1,
    "drinks": 4,
    "apples": 42,
}

检查 box 是否包含任何 appleorangebanana 的最有效方法是什么? 请注意,这里我们寻求的不是完全匹配,而是包含某些字符串的键。所以简单的按键搜索在这里不起作用。

我知道我可以从地图中提取密钥:

keys := make([]string)
for k := range box {
    keys = append(keys, k)
}

然后迭代两个切片以在键中搜索:

for _, f := range fruits {
  for _, k in keys {
      if strings.Contains(k, f) {
       fmt.Println("Fruit found!")
       }
   }

但这反驳了使用map而不是slice进行字符串搜索的优势。那么有没有更好的方法呢?


解决方案


您不需要提取密钥:

for _, f := range fruits {
  for k,fruit := range box {
      if strings.Contains(k, f) {
       fmt.Printf("Fruit found!: %s",fruit)
       }
   }
}

如果只需要检查key是否存在,可以写成for k := range box

由于这是一个包含搜索,因此没有简单的方法可以做到这一点。如果是开头搜索,您可能还需要查看其他数据结构,例如 trie 或前缀树。没有标准库支持这些。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何查看地图键是否包含某些字符串?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>