1.Set
set是一种十分常用的数据结构。一般代码种使用的set的主要性质如下:
1.元素去重
2.进行交集,合集等计算
3.查看元素是否存在
然而,go语言并没有内置的set数据结构想要实现set,我们可以通过map简单实现特定类型的set。
2.代码实现
下面通过代码讲解如何实现string类型的set:(手敲的,不知有没有问题)
type StringSet struct {
dataMap map[string]byte
}
// 创建set
func NewSet(elements ...string) *StringSet{
var dMap = make(map[string]byte)
for _, ele := range elements {
dMap[ele] = true
}
newSet := &StringSet{
dataMap: dMap,
}
return newSet
}
// 添加元素
func (s *StringSet) Add(elements ...string) {
for _, ele := range elements {
dMap[ele] = true
}
}
// 取差集
func (s *StringSet) DiffSet(anotherSet *StringSet) *StringSet {
retSet := NewSet()
for ele, _ := range s.dataMap {
if _, ok := anotherSet.dataMap[ele]; !ok {
retSet.Add(ele)
}
}
return retSet
}
// 取交集
func (s *StringSet) InterSet(anotherSet *StringSet) *StringSet {
retSet := NewSet()
for ele, _ := range s.dataMap {
if _, ok := anotherSet.dataMap[ele]; ok {
retSet.Add(ele)
}
}
return retSet
}
// 包含元素
func (s *StringSet) Contain(element string) bool {
if _, ok := s.dataMap[element]; ok {
return true
}
return false
}
// 获取所有元素的列表
func (s *StringSet) DataSlice() []string {
var retList []string
for ele, _ := range s.dataMap {
retList = append(retList, ele)
}
return retList
}