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
包含任何apple
,orange
还是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 进行字符串搜索的优势。那么有没有更好的方法呢?
您不需要提取密钥:
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
由于这是一个包含搜索,因此没有简单的方法可以做到。如果它是以搜索开始的,那么您可能还想查看其他数据结构,例如特里树或前缀树。没有标准库支持这些。
归档时间: |
|
查看次数: |
37 次 |
最近记录: |