假设我有一段像这样的字符串:
fruits := {"apple", "orange", "banana"}
和像这样的 map
box:= map[string]int{
"chicken": 1,
"drinks": 4,
"apples": 42,
}
检查
box
是否包含apple
,orange
或banana
的最有效方法是什么?请注意,此处我们寻求的不是完全匹配,而是寻求 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/