diff --git a/docs/datastructure/set.md b/docs/datastructure/set.md new file mode 100644 index 0000000..6b115e4 --- /dev/null +++ b/docs/datastructure/set.md @@ -0,0 +1,489 @@ +# Set +Set is a data container, like list, but elements of set is not duplicate. + +
+ +## Source + +- [https://github.com/duke-git/lancet/blob/main/datastructure/set/set.go](https://github.com/duke-git/lancet/blob/main/datastructure/set/set.go) + + + + +## Usage +```go +import ( + set "github.com/duke-git/lancet/v2/datastructure/set" +) +``` + + + +## Index + +- [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) + + + + + +## Documentation + +### NewSet +Make a Set instance
+ +Signature: + +```go +type Set[T comparable] map[T]bool +func NewSet[T comparable](values ...T) Set[T] +``` +Example: + +```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 +Return slice of all set data
+ +Signature: + +```go +func (s Set[T]) Values() []T +``` +Example: + +```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 +Add value to set
+ +Signature: + +```go +func (s Set[T]) Add(values ...T) +``` +Example: + +```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 +Delete value in set
+ +Signature: + +```go +func (s Set[T]) Delete(values ...T) +``` +Example: + +```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 +Check if value is in set or not
+ +Signature: + +```go +func (s Set[T]) Contain(value T) bool +``` +Example: + +```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 +Checks if set contains another set
+ +Signature: + +```go +func (s Set[T]) ContainAll(other Set[T]) bool +``` +Example: + +```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 +Get the number of elements in set
+ +Signature: + +```go +func (s Set[T]) Size() int +``` +Example: + +```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 +Make a copy of set
+ +Signature: + +```go +func (s Set[T]) Clone() Set[T] +``` +Example: + +```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 +Check if two sets has same elements or not
+ +Signature: + +```go +func (s Set[T]) Equal(other Set[T]) bool +``` +Example: + +```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 +Call function by every element of set
+ +Signature: + +```go +func (s Set[T]) Iterate(fn func(value T)) +``` +Example: + +```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 +Check if the set is empty or not
+ +Signature: + +```go +func (s Set[T]) IsEmpty() bool +``` +Example: + +```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 +Create a new set contain all element of set s and other
+ +Signature: + +```go +func (s Set[T]) Union(other Set[T]) Set[T] +``` +Example: + +```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 +Create a new set whose element both be contained in set s and other
+ +Signature: + +```go +func (s Set[T]) Intersection(other Set[T]) Set[T] +``` +Example: + +```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 +Create a new set whose element is in set1 or set2, but not in both set1 and set2
+ +Signature: + +```go +func (s Set[T]) SymmetricDifference(other Set[T]) Set[T] +``` +Example: + +```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 +Create an set of whose element in origin set but not in compared set
+ +Signature: + +```go +func (s Set[T]) Minus(comparedSet Set[T]) Set[T] +``` +Example: + +```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 +} +``` + + +