golang中set數(shù)據(jù)結構的使用示例
更新時間:2023年03月08日 14:59:30 作者:Pecto
本文主要介紹了golang中set數(shù)據(jù)結構的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
借助map實現(xiàn)
golang中沒有set數(shù)據(jù)結構,一般是通過map實現(xiàn),因為map的key值是不能重復的
示例
type empty struct {
}
// golang中的set數(shù)據(jù)類型
func MakeGolangSet(){
?? ?// 首先,空結構體內(nèi)存消耗為0,其它數(shù)據(jù)結構如布爾值等均存在內(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)
}算法應用
找兩個數(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刪掉,避免結果中出現(xiàn)重復數(shù)據(jù)
?? ??? ??? ?delete(set, v)
?? ??? ?}
?? ?}
?? ?return res
}到此這篇關于golang中set數(shù)據(jù)結構的使用示例的文章就介紹到這了,更多相關golang set數(shù)據(jù)結構內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Go語言中切片(slice)和數(shù)組(array)的區(qū)別詳解
Go語言中切片(slice)和數(shù)組(array)是兩種不同的數(shù)據(jù)結構,它們在用法和行為上有一些重要區(qū)別,所以本文就通過一些代碼示例給大家詳細的介紹一下Go語言中切片(slice)和數(shù)組(array)的區(qū)別,需要的朋友可以參考下2023-09-09
golang?gorm學習之如何指定數(shù)據(jù)表
在sql中首先要指定是從哪張表中查詢,所以這篇文章小編就來帶大家一起看一下gorm是如何根據(jù)model來自動解析表名的,感興趣的小伙伴可以了解下2023-08-08
解決golang編譯提示dial tcp 172.217.160.113:443: con
這篇文章主要介紹了解決golang編譯提示dial tcp 172.217.160.113:443: connectex: A connection attempt failed,此問題完美解決,需要的朋友可以參考下2023-02-02

