中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang 中怎么判斷字符串是否在一個數組中

發布時間:2021-07-23 16:51:23 來源:億速云 閱讀:326 作者:Leah 欄目:編程語言

Golang 中怎么判斷字符串是否在一個數組中,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在使用 Python 的時候,如果要判斷一個字符串是否在另一個包含字符串的列表中,可以使用in 關鍵詞,例如:

name_list = ['pm', 'kingname', '青南'] if 'kingname' in name_list:     print('kingname 在列表里面')

但是,Golang 是沒有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) }

運行效果如下圖所示:

Golang 中怎么判斷字符串是否在一個數組中

但這種方式有一個弊端,就是要遍歷整個字符串數組。如果數組里面有100萬條數據,那么平均要遍歷50萬次才能找到。這是一個非常費時間的操作。

有沒有什么辦法可以優化這個操作呢?

如果是有序的整型數組,那么我們可以使用二分查找,把時間復雜度O(n)降到對數時間復雜度。字符串能不能也這樣操作呢?實際上是可以的。

在 Golang  中,有一個排序模塊sort,它里面有一個sort.Strings()函數,可以對字符串數組進行排序。同時,還有一個sort.SearchStrings()[1]函數,會用二分法在一個有序字符串數組中尋找特定字符串的索引。

結合兩個函數,我們可以實現一個更高效的算法:

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) }

運行效果如下圖所示:

Golang 中怎么判斷字符串是否在一個數組中

其中,sort.Strings是一個 in-place 的修改方式,是直接修改的  str_array。修改以后str_array變成有序的字符串數組。接下來通過二分查找快速定位。如果找到了,那么返回目標字符串在排序后的列表中第一次出現的索引。如果沒有找到,那么返回數組中最后一個元素的索引。所以只要  index 小于最后一個元素的索引,那么目標字符串肯定存在;如果等于最后一個元素的索引,但是值不等于最后一個元素,那么目標字符串就不存在于字符串數組中。

通過先排序再查詢的方式,對于100萬個元素的字符串數組,只需要查詢20次左右就能確認字符串是否存在。速度大大提升。

最后考大家一個思考題。name_list一開始是亂序的字符串數組,在上圖第23行,如果打印一下  name_list,打印出來的是經過排序的,還是沒有經過排序的字符串數字?

關于 Golang 中怎么判斷字符串是否在一個數組中問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

冷水江市| 元朗区| 武宁县| 安宁市| 洪江市| 浮梁县| 江门市| 东阳市| 澄城县| 霞浦县| 乌苏市| 明溪县| 台山市| 泽库县| 乌兰浩特市| 江孜县| 兴和县| 将乐县| 梅河口市| 万年县| 溧水县| 舞阳县| 高州市| 安宁市| 济阳县| 海安县| 铁力市| 阿巴嘎旗| 黄骅市| 巴马| 增城市| 林口县| 泸西县| 乐安县| 当涂县| 屏东县| 丹寨县| 开化县| 新邵县| 界首市| 北流市|