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