Golang实现Set集合

代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package main

import (
	"fmt"
)

type Empty struct {
}

type Set struct {
	m map[any]Empty
}

func (s *Set) Add(items ...interface{}) {
	for _, item := range items {
		s.m[item] = Empty{}
	}
}

func (s *Set) Remove(item any) {
	delete(s.m, item)
}

func (s *Set) Contains(item any) bool {
	_, ok := s.m[item]
	return ok
}

func (s *Set) Clear() {
	s.m = make(map[any]Empty)
}

func (s *Set) Size() int {
	return len(s.m)
}

func NewSet(items ...any) *Set {
	s := &Set{}
	s.m = make(map[any]Empty)
	s.Add(items...)
	return s
}

func main() {
	set := NewSet("AA", "C", 546, false, false, true)
	for a := range set.m {
		fmt.Print(" ", a)
	}
	fmt.Println()
	set.Add("dd", "ff", 23.2)
	set.Remove("C")
	for a := range set.m {
		fmt.Print(" ", a)
	}
	set.Clear()
	fmt.Println()
	fmt.Println("Size: ", set.Size())
}

//运行结果

AA C 546 false true
546 false true dd ff 23.2 AA
Size: 0