聊聊gost的HashSet


本文摘自网络,作者,侵删。

本文主要研究一下gost的HashSet

HashSet

gost/container/set/hashset.go

var itemExists = struct{}{}

type HashSet struct {
    Items map[interface{}]struct{}
}

func NewSet(values ...interface{}) *HashSet {
    set := &HashSet{Items: make(map[interface{}]struct{})}
    if len(values) > 0 {
        set.Add(values...)
    }
    return set
}

func (set *HashSet) Add(items ...interface{}) {
    for _, item := range items {
        set.Items[item] = itemExists
    }
}

func (set *HashSet) Remove(items ...interface{}) {
    for _, item := range items {
        delete(set.Items, item)
    }
}

func (set *HashSet) Contains(items ...interface{}) bool {
    for _, item := range items {
        if _, contains := set.Items[item]; !contains {
            return false
        }
    }
    return true
}
func (set *HashSet) Empty() bool {
    return set.Size() == 0
}
func (set *HashSet) Size() int {
    return len(set.Items)
}

func (set *HashSet) Clear() {
    set.Items = make(map[interface{}]struct{})
}

func (set *HashSet) Values() []interface{} {
    values := make([]interface{}, set.Size())
    count := 0
    for item := range set.Items {
        values[count] = item
        count++
    }
    return values
}
func (set *HashSet) String() string {
    str := "HashSet\n"
    var items []string
    for k := range set.Items {
        items = append(items, fmt.Sprintf("%v", k))
    }
    str += strings.Join(items, ", ")
    return str
}
HashSet定义了Items属性;NewSet根据values来创建HashSet;它提供了Add、Remove、Contains、Empty、Size、Clear、Values、String方法

实例

gost/container/set/hashset_test.go

func TestSetNew(t *testing.T) {
    set := NewSet(2, 1)

    if actualValue := set.Size(); actualValue != 2 {
        t.Errorf("Got %v expected %v", actualValue, 2)
    }
    if actualValue := set.Contains(1); actualValue != true {
        t.Errorf("Got %v expected %v", actualValue, true)
    }
    if actualValue := set.Contains(2); actualValue != true {
        t.Errorf("Got %v expected %v", actualValue, true)
    }
    if actualValue := set.Contains(3); actualValue != false {
        t.Errorf("Got %v expected %v", actualValue, true)
    }
}

小结

gost的HashSet定义了Items属性,它通过map结构来实现,它提供了Add、Remove、Contains、Empty、Size、Clear、Values、String方法。

doc

  • gost

本文来自:Segmentfault

感谢作者:codecraft

查看原文:聊聊gost的HashSet

相关阅读 >>

手撸Golang Go与微服务 saga模式之3

手撸Golang Go与微服务 saga模式之7

了解Go 扁平化项目结构

源码读起来,Go源码共读计划

Go系列:Go项目中包的管理

Golang中的bee是指什么

关于Golang的那些事(八)-- 使用共享变量实现并发

[译]如何避免Golang的坑

Go语言函数

手撸Golang Go与微服务 es-cqrs模式之2

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...