# Set
Set集合数据结构,类似列表。Set中元素不重复。
# 源码
# 用法
import (
set "github.com/duke-git/lancet/v2/datastructure/set"
)
# 目录
# 文档
# NewSet
返回Set结构体对象
函数签名:
type Set[T comparable] map[T]bool
func NewSet[T comparable](values ...T) Set[T]
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
st := set.NewSet[int](1,2,2,3)
fmt.Println(st.Values()) //1,2,3
}
# Values
获取集合中所有元素的切片
函数签名:
func (s Set[T]) Values() []T
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
st := set.NewSet[int](1,2,2,3)
fmt.Println(st.Values()) //1,2,3
}
# Add
向集合中添加元素
函数签名:
func (s Set[T]) Add(values ...T)
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
st := set.NewSet[int]()
st.Add(1, 2, 3)
fmt.Println(st.Values()) //1,2,3
}
# Delete
删除集合中元素
函数签名:
func (s Set[T]) Delete(values ...T)
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
st := set.NewSet[int]()
st.Add(1, 2, 3)
set.Delete(3)
fmt.Println(st.Values()) //1,2
}
# Contain
判断集合是否包含某个值
函数签名:
func (s Set[T]) Contain(value T) bool
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
st := set.NewSet[int]()
st.Add(1, 2, 3)
fmt.Println(st.Contain(1)) //true
fmt.Println(st.Contain(4)) //false
}
# ContainAll
判断集合是否包含另一个集合
函数签名:
func (s Set[T]) ContainAll(other Set[T]) bool
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set.NewSet(1, 2)
set3 := set.NewSet(1, 2, 3, 4)
fmt.Println(set1.ContainAll(set2)) //true
fmt.Println(set1.ContainAll(set3)) //false
}
# Size
获取集合中元素的个数
函数签名:
func (s Set[T]) Size() int
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
fmt.Println(set1.Size()) //3
}
# Clone
克隆一个集合
函数签名:
func (s Set[T]) Clone() Set[T]
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set1.Clone()
fmt.Println(set1.Size() == set2.Size()) //true
fmt.Println(set1.ContainAll(set2)) //true
}
# Equal
比较两个集合是否相等,包含相同元素为相等
函数签名:
func (s Set[T]) Equal(other Set[T]) bool
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set.NewSet(1, 2, 3)
set3 := set.NewSet(1, 2, 3, 4)
fmt.Println(set1.Equal(set2)) //true
fmt.Println(set1.Equal(set3)) //false
}
# Iterate
迭代结合,在每个元素上调用函数
函数签名:
func (s Set[T]) Iterate(fn func(value T))
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
arr := []int{}
set.Iterate(func(value int) {
arr = append(arr, value)
})
fmt.Println(arr) //1,2,3
}
# IsEmpty
判断集合是否为空
函数签名:
func (s Set[T]) IsEmpty() bool
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set.NewSet()
fmt.Println(set1.IsEmpty()) //false
fmt.Println(set2.IsEmpty()) //true
}
# Union
求两个集合的并集
函数签名:
func (s Set[T]) Union(other Set[T]) Set[T]
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set.NewSet(2, 3, 4, 5)
set3 := set1.Union(set2)
fmt.Println(set3.Values()) //1,2,3,4,5
}
# Intersection
求两个集合的交集
函数签名:
func (s Set[T]) Intersection(other Set[T]) Set[T]
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set.NewSet(2, 3, 4, 5)
set3 := set1.Intersection(set2)
fmt.Println(set3.Values()) //2,3
}
# SymmetricDifference
返回一个集合,其中元素在第一个集合或第二个集合中,且不同时存在于两个集合中
函数签名:
func (s Set[T]) SymmetricDifference(other Set[T]) Set[T]
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set.NewSet(2, 3, 4, 5)
set3 := set1.SymmetricDifference(set2)
fmt.Println(set3.Values()) //1,4,5
}
# Minus
创建一个集合,其元素在原始集中但不在比较集中
函数签名:
func (s Set[T]) Minus(comparedSet Set[T]) Set[T]
例子:
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
set1 := set.NewSet(1, 2, 3)
set2 := set.NewSet(2, 3, 4, 5)
set3 := set.NewSet(2, 3)
res1 := set1.Minus(set2)
fmt.Println(res1.Values()) //1
res2 := set2.Minus(set3)
fmt.Println(res2.Values()) //4,5
}