[英]How to see if map keys contain certain strings?
假设我有一段字符串,如:
fruits := {"apple", "orange", "banana"}
和一张像
box:= map[string]int{
"chicken": 1,
"drinks": 4,
"apples": 42,
}
检查box
中是否装有apple
、 orange
或banana
的最有效方法是什么? 请注意,在这里我们追求的不完全一致,但含有某些字符串的关键。 所以简单的键搜索在这里不起作用。
我知道我可以从地图中提取键:
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.