go 实现 set

2022-03-19  本文已影响0人  wayyyy

go 中自带的标准库只有map,而没有set,那么我们可以利用 mapstruct{} size 为0 来简单实现一个 set

package main

import "fmt"

type Set map[string]struct{}

func NewSet() Set {
    s := make(map[string]struct{})
    return Set(s)
}

func NewSetWithInitSize(size int) Set {
    s := make(map[string]struct{}, size)
    return Set(s)
}

func (s Set) Has(key string) bool {
    _, exist := s[key]
    return exist
}

func (s Set) Add(key string) {
    s[key] = struct{}{}
}

func (s Set) Delete(key string) {
    delete(s, key)
}

func main() {
    s := NewSet()

    s.Add("hello")
    s.Add("world")
    s.Add("go")

    exist := s.Has("hello")
    if exist {
        fmt.Println("exist")
    }

    exist = s.Has("world")
    if exist {
        fmt.Println("exist")
    }

    s.Delete("go")

    exist = s.Has("go")
    if exist {
        fmt.Println("exist")
    } else {
        fmt.Println("not exist")
    }
}

更加完备的set,使用开源库:golang-set

上一篇下一篇

猜你喜欢

热点阅读