golang中set數(shù)據(jù)結(jié)構(gòu)的使用示例
借助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)文章
goland把go項目打包進(jìn)docker鏡像的全過程記錄
golang編譯的應(yīng)用是不需要依賴其他運行環(huán)境的,下面這篇文章主要給大家介紹了關(guān)于goland把go項目打包進(jìn)docker鏡像的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Go語言切片前或中間插入項與內(nèi)置copy()函數(shù)詳解
這篇文章主要介紹了Go語言切片前或中間插入項與內(nèi)置copy()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Golang動態(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-10
Bililive-go 實現(xiàn)直播自動監(jiān)控錄制功能
最近有直播錄制的需求,但是自己手動錄制太麻煩繁瑣,于是用了開源項目Bililive-go進(jìn)行全自動監(jiān)控錄制,對Bililive-go 直播自動監(jiān)控錄制實現(xiàn)思路感興趣的朋友,一起看看吧2024-03-03

