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

标签 string dictionary go

假设我有一段像这样的字符串:

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

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

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

我知道我可以从 map 中提取 key :
keys := make([]string)
for k := range box {
    keys = append(keys, k)
}

然后遍历两个 slice 以在键中搜索:
for _, f := range fruits {
  for _, k in keys {
      if strings.Contains(k, f) {
       fmt.Println("Fruit found!")
       }
   }

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

最佳答案

您不需要提取 key :

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或前缀树。没有标准的库支持。

关于string - 如何查看映射键是否包含某些字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60007556/

相关文章:

go - 扫描仪可以有 slice 接收器吗?

php - 如何在 PHP 中获取字符串的字节值?

c# - StringComparison.InvariantCultureIgnoreCase 有快捷方式吗?

python - 对导出到excel的字典进行排序?

python - 构建一个将列表转换为字典并根据条件分配键值的函数

azure - 启用单点登录

php - 为什么 Php pbkdf2 输出与 golang 不同?

python - 如何在 Python 中使用 referer 和 href 查找 url?

python - 如何在 Python 中拆分 1 次或多次出现的分隔符?

python - 将 "pairs"的列表转换为字典的字典?