本篇博客记录下在 golang 中进行集合操作的方式,在一些项目中可能会用到。
我们使用 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
|
package main
import (
"fmt"
mapset "github.com/deckarep/golang-set"
)
func main() {
// 初始化集合 envs
envs := mapset.NewSet()
// 向集合 envs 中添加元素
envs.Add("prod")
envs.Add("test")
envs.Add("pre")
env := "alpha"
// 判断集合 envs 中是否包含指定元素
if envs.Contains(env) {
fmt.Println("包含")
} else {
fmt.Println("不包含")
}
}
|
1、从 interface 数组生成新的集合
1
|
currentEnvs := mapset.NewSetFromSlice([]interface{}{"prod", "test", "alpha"})
|
2、差集计算
1
|
differenceSet := envs.Difference(currentEnvs) // envs 对 currentEnvs 的差集
|
3、判断父集合子集
1
2
|
isSuperSet := envs.IsSuperset(currentEnvs)
isSubSet := currentEnvs.IsSubset(envs)
|
IsProperSubset(other Set) bool
和 IsProperSuperset(other Set) bool
与这两个方法的区别在于:这两者不包括两个集合相等的情况
4、并集计算
1
|
unionSet := envs.Union(currentEnvs)
|
5、交集计算
1
|
intersection := envs.Intersect(currentEnvs)
|
6、集合相等判断
1
|
isEqual := envs.Equal(currentEnvs)
|
7、获取集合元素个数
8、删除集合元素
如果删除的元素不存在,不会出现错误。
https://github.com/deckarep/golang-set