如何查看映射键是否包含某些字符串?

Mil*_*way 1 string dictionary go

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

fruits := {"apple", "orange", "banana"}
Run Code Online (Sandbox Code Playgroud)

和一张像

box:= map[string]int{
    "chicken": 1,
    "drinks": 4,
    "apples": 42,
}
Run Code Online (Sandbox Code Playgroud)

什么是检查是否是最有效的方式box包含任何appleorange还是banana?请注意,在这里我们追求的不完全一致,但一个关键CONTAINS某些字符串。所以简单的键搜索在这里不起作用。

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

keys := make([]string)
for k := range box {
    keys = append(keys, k)
}
Run Code Online (Sandbox Code Playgroud)

然后遍历两个切片以在键中搜索:

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

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

Bur*_*dar 5

您不需要提取密钥:

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

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

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