in
name_list = ['pm', 'kingname', '青南']
if 'kingname' in name_list:
print('kingname 在列表里面')
in
package main
import "fmt"
func in(target string, str_array []string) bool {
for _, element := range str_array{
if target == element{
return true
}
}
return false
}
func main(){
name_list := []string{"pm", "kingname", "青南"}
target1 := "kingname"
target2 := "产品经理"
result := in(target1, name_list)
fmt.Println("kingname 是否在 name_list 中:", result)
result = in(target2, name_list)
fmt.Println("产品经理是否在 name_list 中:", result)
}
运行效果如下图所示:
但这种方式有一个弊端,就是要遍历整个字符串数组。如果数组里面有100万条数据,那么平均要遍历50万次才能找到。这是一个非常费时间的操作。
有没有什么办法可以优化这个操作呢?
O(n)
sortsort.Strings()
结合两个函数,我们可以实现一个更高效的算法:
package main
import (
"fmt"
"sort"
)
func in(target string, str_array []string) bool {
sort.Strings(str_array)
index := sort.SearchStrings(str_array, target)
if index len(str_array) && str_array[index] == target {
return true
}
return false
}
func main(){
name_list := []string{"pm", "kingname", "青南"}
target1 := "kingname"
target2 := "产品经理"
result := in(target1, name_list)
fmt.Println("kingname 是否在 name_list 中:", result)
result = in(target2, name_list)
fmt.Println("产品经理是否在 name_list 中:", result)
}
运行效果如下图所示:
sort.Stringsstr_arraystr_array
通过先排序再查询的方式,对于100万个元素的字符串数组,只需要查询20次左右就能确认字符串是否存在。速度大大提升。
name_listname_list
参考资料
[1]sort.SearchStrings()