diff --git a/docs/datastructure/set_zh-CN.md b/docs/datastructure/set_zh-CN.md new file mode 100644 index 0000000..eeb43de --- /dev/null +++ b/docs/datastructure/set_zh-CN.md @@ -0,0 +1,489 @@ +# Set +Set集合数据结构,类似列表。Set中元素不重复。 + +
+ +## 源码 + +- [https://github.com/duke-git/lancet/blob/main/datastructure/set/set.go](https://github.com/duke-git/lancet/blob/main/datastructure/set/set.go) + + +
+ +## 用法 +```go +import ( + set "github.com/duke-git/lancet/v2/datastructure/set" +) +``` + +
+ +## 目录 + +- [NewSet](#NewSet) +- [Values](#Values) +- [Add](#Add) +- [Delete](#Delete) +- [Contain](#Contain) +- [ContainAll](#ContainAll) +- [Clone](#Clone) +- [Size](#Size) +- [Equal](#Equal) +- [Iterate](#Iterate) +- [IsEmpty](#IsEmpty) +- [Union](#Union) +- [Intersection](#Intersection) + +- [SymmetricDifference](#SymmetricDifference) +- [Minus](#Minus) + + + +
+ +## 文档 + +### NewSet +

返回Set结构体对象

+ +函数签名: + +```go +type Set[T comparable] map[T]bool +func NewSet[T comparable](values ...T) Set[T] +``` +例子: + +```go +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 +

获取集合中所有元素的切片

+ +函数签名: + +```go +func (s Set[T]) Values() []T +``` +例子: + +```go +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 +

向集合中添加元素

+ +函数签名: + +```go +func (s Set[T]) Add(values ...T) +``` +例子: + +```go +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 +

删除集合中元素

+ +函数签名: + +```go +func (s Set[T]) Delete(values ...T) +``` +例子: + +```go +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 +

判断集合是否包含某个值

+ +函数签名: + +```go +func (s Set[T]) Contain(value T) bool +``` +例子: + +```go +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 +

判断集合是否包含另一个集合

+ +函数签名: + +```go +func (s Set[T]) ContainAll(other Set[T]) bool +``` +例子: + +```go +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 +

获取集合中元素的个数

+ +函数签名: + +```go +func (s Set[T]) Size() int +``` +例子: + +```go +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 +

克隆一个集合

+ +函数签名: + +```go +func (s Set[T]) Clone() Set[T] +``` +例子: + +```go +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 +

比较两个集合是否相等,包含相同元素为相等

+ +函数签名: + +```go +func (s Set[T]) Equal(other Set[T]) bool +``` +例子: + +```go +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 +

迭代结合,在每个元素上调用函数

+ +函数签名: + +```go +func (s Set[T]) Iterate(fn func(value T)) +``` +例子: + +```go +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 +

判断集合是否为空

+ +函数签名: + +```go +func (s Set[T]) IsEmpty() bool +``` +例子: + +```go +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 +

求两个集合的并集

+ +函数签名: + +```go +func (s Set[T]) Union(other Set[T]) Set[T] +``` +例子: + +```go +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 +

求两个集合的交集

+ +函数签名: + +```go +func (s Set[T]) Intersection(other Set[T]) Set[T] +``` +例子: + +```go +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 +

返回一个集合,其中元素在第一个集合或第二个集合中,且不同时存在于两个集合中

+ +函数签名: + +```go +func (s Set[T]) SymmetricDifference(other Set[T]) Set[T] +``` +例子: + +```go +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 +

创建一个集合,其元素在原始集中但不在比较集中

+ +函数签名: + +```go +func (s Set[T]) Minus(comparedSet Set[T]) Set[T] +``` +例子: + +```go +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 +} +``` + + +