您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Golang怎么使用Map實現去重與set的功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
golang是一種編譯語言,可以將代碼編譯為機器代碼,編譯后的二進制文件可以直接部署到目標機器而無需額外的依賴,所以golang的性能優于其他的解釋性語言,且可以在golang中使用goroutine來實現并發性,它提供了一個非常優雅的goroutine調度程序系統,可以很容易地生成數百萬個goroutine。
假設現在有一個需求
www.baidu.com www.sina.com.cn www.hao123.com www.baidu.com www.hao123.com
package main var set = map[string]bool { } func main() { ... url := xxx if set[url] { // 表示集合中已經存在 return } set[url] = true // 否則如果不存在,設置為true }
// 完成后,set的所有的key值為不重復的值
在此之前,需要確定 golang 支持的 map 的 key 數量
package main import ( "fmt" ) var test = map[int]int { } func main() { for i := 0; i < 10000000; i++ { // 測試對1000萬key的支持,完美支持 fmt.Println(i) test[i] = i } }
補充:golang map/set類型
map是一種無序的鍵值對的集合; 所以可以類似數組/slice一樣進行迭代
map的值可以使內建類型, 也可以是struct類型
內部使用hash表實現, map的hash表包含了一個collection of buckets(桶集合)
package main import ( "fmt" ) // map[keyType]valueType func initMap() { // 通過make方法創建 dict := make(map[string]int) dict["age"] = 18 // 直接創建 dict2 := map[string]string{"name":"xiaoming", "phone":"135xxx"} dict2["addr"] = "Guangzhou" fmt.Printf("%v\n", dict2) } func main() { initMap() }
package main import ( "fmt" ) type Student struct { name string grade int } func useMap() { //使用前應該先初始化, 否則panic報錯 // var map1 map[string]string // map1["a"] = "b" // will panic map1 := make(map[string]Student) map1["s1"] = Student{name:"xiaomo", grade:1} fmt.Printf("%v\n", map1) } func main() { useMap() }
在函數間傳遞map對象, 是傳遞引用而不是拷貝; 因此在函數中對map進行了修改, 引用到它的地方也會相應修改
package main import ( "fmt" ) type Student struct { name string grade int } func useMap() { map1 := make(map[string]Student) map1["s1"] = Student{name:"xiaomo", grade:1} // 作為函數參數傳遞 printMap(map1) } func printMap(m map[string]Student) { fmt.Printf("currentMap: %v\n", m) } func main() { useMap() }
golang沒有內置Set類型, 可以自定義實現。
關于“Golang怎么使用Map實現去重與set的功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。