golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例
更新時間:2023年03月08日 14:59:30 作者:Pecto
本文主要介紹了golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
借助map實現(xiàn)
golang中沒有set數(shù)據(jù)結(jié)構(gòu),一般是通過map實現(xiàn),因為map的key值是不能重復(fù)的
示例
type empty struct { } // golang中的set數(shù)據(jù)類型 func MakeGolangSet(){ ?? ?// 首先,空結(jié)構(gòu)體內(nèi)存消耗為0,其它數(shù)據(jù)結(jié)構(gòu)如布爾值等均存在內(nèi)存消耗 ?? ?var e empty ?? ?fmt.Printf("empty struct memory is %v\n", unsafe.Sizeof(e)) ?? ?fmt.Printf("bool memory is %v\n", unsafe.Sizeof(false)) ?? ?set := make(map[string]struct{}) ?? ?// ADD ?? ?set["foo"] = e ?? ?// DELETE ?? ?delete(set, "foo") ?? ?// set的規(guī)模 ?? ?size := len(set) ?? ?fmt.Printf("set size is %v\n", size) ?? ?// 判斷是否存在 ?? ?set["foo"] = e ?? ?value, exist := set["foo"] ?? ?fmt.Printf("value is %v\n, exist is %v\n", value, exist) }
算法應(yīng)用
找兩個數(shù)組的交集
// 兩個數(shù)組的交集 func SectionWithTwoArray(num1, num2 []int) []int{ ?? ?set := make(map[int]struct{}, 0) ?? ?var res []int ?? ?for _, v := range num1 { ?? ??? ?if _, ok := set[v]; !ok { ?? ??? ??? ?// 去重 ?? ??? ??? ?set[v] = struct{}{} ?? ??? ?} ?? ?} ?? ?for _, v := range num2 { ?? ??? ?if _, ok := set[v]; ok { ?? ??? ??? ?res = append(res, v) ?? ??? ??? ?// 將此v刪掉,避免結(jié)果中出現(xiàn)重復(fù)數(shù)據(jù) ?? ??? ??? ?delete(set, v) ?? ??? ?} ?? ?} ?? ?return res }
到此這篇關(guān)于golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例的文章就介紹到這了,更多相關(guān)golang set數(shù)據(jù)結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言切片前或中間插入項與內(nèi)置copy()函數(shù)詳解
這篇文章主要介紹了Go語言切片前或中間插入項與內(nèi)置copy()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04Golang動態(tài)數(shù)組的實現(xiàn)示例
動態(tài)數(shù)組能自動調(diào)整大小,與靜態(tài)數(shù)組不同,其大小不固定,可根據(jù)需求變化,實現(xiàn)通常依賴于數(shù)據(jù)結(jié)構(gòu)如鏈表或數(shù)組加額外信息,本文就來介紹一下Golang動態(tài)數(shù)組的實現(xiàn)示例,感興趣的可以了解一下2024-10-10Bililive-go 實現(xiàn)直播自動監(jiān)控錄制功能
最近有直播錄制的需求,但是自己手動錄制太麻煩繁瑣,于是用了開源項目Bililive-go進行全自動監(jiān)控錄制,對Bililive-go 直播自動監(jiān)控錄制實現(xiàn)思路感興趣的朋友,一起看看吧2024-03-03