golang中set數據結構的使用示例

借助map實現

golang中沒有set數據結構,一般是通過map實現,因為map的key值是不能重復的

示例

type empty struct {
}

// golang中的set數據類型
func MakeGolangSet(){
    // 首先,空結構體內存消耗為0,其它數據結構如佈爾值等均存在內存消耗
    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的規模
    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)
}

算法應用

找兩個數組的交集

// 兩個數組的交集
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刪掉,避免結果中出現重復數據
            delete(set, v)
        }
    }
    return res
}

到此這篇關於golang中set數據結構的使用示例的文章就介紹到這瞭,更多相關golang set數據結構內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: