繁体   English   中英

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

[英]How to see if map keys contain certain strings?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM