成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Golang 中如何快速判斷字符串是否在一個數組中

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

[[346073]]

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

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

但是,Golang 是沒有in這個關鍵詞的,所以如果要判斷一個字符串數組中是否包含一個特定的字符串,就需要一個一個對比:

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5.  
  6. func in(target string, str_array []string) bool { 
  7.      for _, element :range str_array{ 
  8.         if target == element{ 
  9.             return true 
  10.         } 
  11.     } 
  12.     return false 
  13.  
  14. func main(){ 
  15.     name_list := []string{"pm", "kingname", "青南"} 
  16.     target1 :"kingname" 
  17.     target2 :"產品經理" 
  18.     result :in(target1, name_list) 
  19.     fmt.Println("kingname 是否在 name_list 中:", result) 
  20.     result = in(target2, name_list) 
  21.     fmt.Println("產品經理是否在 name_list 中:", result) 

運行效果如下圖所示:

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

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

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

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

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

  1. package main 
  2.  
  3. import ( 
  4.         "fmt" 
  5.         "sort" 
  6.     ) 
  7.  
  8.  
  9. func in(target string, str_array []string) bool { 
  10.     sort.Strings(str_array) 
  11.     index :sort.SearchStrings(str_array, target) 
  12.     if index < len(str_array) && str_array[index] == target { 
  13.         return true 
  14.     } 
  15.     return false 
  16.  
  17. func main(){ 
  18.     name_list := []string{"pm", "kingname", "青南"} 
  19.     target1 :"kingname" 
  20.     target2 :"產品經理" 
  21.     result :in(target1, name_list) 
  22.     fmt.Println("kingname 是否在 name_list 中:", result) 
  23.     result = in(target2, name_list) 
  24.     fmt.Println("產品經理是否在 name_list 中:", result) 

運行效果如下圖所示:

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

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

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

 

責任編輯:趙寧寧 來源: 未聞Code
相關推薦

2022-11-24 08:01:57

bash腳本字符串

2021-01-04 09:12:31

集合變量

2018-12-14 09:32:06

億級數據存在

2020-09-29 07:24:14

Python字典數據

2016-08-03 17:23:47

javascripthtml前端

2017-10-10 14:41:38

Linux

2023-03-31 07:31:28

SliceGolang

2018-12-14 09:16:31

裝載數據數組

2023-04-25 15:46:51

Python字符串

2021-12-29 16:40:54

Python語言字符串

2022-12-08 15:55:52

JavaScript字符串

2020-08-24 08:07:32

Node.js文件函數

2024-01-09 16:43:49

Shell腳本開發

2023-03-15 09:00:43

SwiftUISlider

2011-09-08 10:46:12

Widget

2015-08-06 13:44:21

swiftcocoapods

2019-01-08 09:23:16

Java字符串編碼

2011-08-04 17:13:48

Objective-C 字符串

2020-08-01 16:19:13

JavaScript字符串開發

2010-03-11 19:34:57

Python字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产午夜三级一区二区三 | 成人av观看 | 国产成人精品久久二区二区 | 日韩精品一区二区三区在线播放 | 久久美女网 | 在线观看中文字幕 | 国产一级在线 | 久久av一区 | 日韩久久久久久 | 国产在线精品免费 | 国产亚洲精品精品国产亚洲综合 | 综合九九 | 成人影院在线视频 | 亚洲精美视频 | 91久久北条麻妃一区二区三区 | 精品91久久| 天天干天天草 | 电影在线 | 国产欧美一区二区精品忘忧草 | 久一精品| 精品国产99 | www.国产91| 久久在线看 | 又爽又黄axxx片免费观看 | 欧美综合在线观看 | caoporn国产 | 国产精品99精品久久免费 | 国产日韩精品久久 | a级黄色网 | 7777精品伊人久久精品影视 | 一级黄在线观看 | 性高湖久久久久久久久3小时 | 久草青青草 | 欧美精品二区三区 | 毛片免费在线 | 一区二区三区视频在线 | 欧美性tv| 国产91在线精品 | www.亚洲视频.com | 日本中文字幕日韩精品免费 | 81精品国产乱码久久久久久 |