1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-05 13:22:26 +08:00

docs: add doc for AddIfNotExist and AddIfNotExistBy

This commit is contained in:
dudaodong
2022-11-30 11:54:04 +08:00
parent 76f4eeea16
commit acb5844b15
2 changed files with 162 additions and 22 deletions

View File

@@ -24,6 +24,8 @@ import (
- [NewSet](#NewSet)
- [Values](#Values)
- [Add](#Add)
- [AddIfNotExist](#AddIfNotExist)
- [AddIfNotExistBy](#AddIfNotExistBy)
- [Delete](#Delete)
- [Contain](#Contain)
- [ContainAll](#ContainAll)
@@ -50,7 +52,7 @@ import (
```go
type Set[T comparable] map[T]bool
func NewSet[T comparable](values ...T) Set[T]
func NewSet[T comparable](items ...T) Set[T]
```
<b>Example:</b>
@@ -99,12 +101,12 @@ func main() {
### <span id="Add">Add</span>
<p>Add value to set</p>
<p>Add items to set</p>
<b>Signature:</b>
```go
func (s Set[T]) Add(values ...T)
func (s Set[T]) Add(items ...T)
```
<b>Example:</b>
@@ -125,14 +127,83 @@ func main() {
```
### <span id="Delete">Delete</span>
<p>Delete value in set</p>
### <span id="AddIfNotExist">AddIfNotExist</span>
<p>AddIfNotExist checks if item exists in the set, it adds the item to set and returns true if it does not exist in the set, or else it does nothing and returns false.</p>
<b>Signature:</b>
```go
func (s Set[T]) Delete(values ...T)
func (s Set[T]) AddIfNotExist(item T) bool
```
<b>Example:</b>
```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)
r1 := st.AddIfNotExist(1)
r2 := st.AddIfNotExist(4)
fmt.Println(r1) // false
fmt.Println(r2) // true
fmt.Println(st.Values()) // 1,2,3,4
}
```
### <span id="AddIfNotExistBy">AddIfNotExistBy</span>
<p>AddIfNotExistBy checks if item exists in the set and pass the `checker` function it adds the item to set and returns true if it does not exists in the set and function `checker` returns true, or else it does nothing and returns false.</p>
<b>Signature:</b>
```go
func (s Set[T]) AddIfNotExistBy(item T, checker func(element T) bool) bool
```
<b>Example:</b>
```go
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
st := set.NewSet[int]()
st.Add(1, 2)
ok := st.AddIfNotExistBy(3, func(val int) bool {
return val%2 != 0
})
fmt.Println(ok) // true
notOk := st.AddIfNotExistBy(4, func(val int) bool {
return val%2 != 0
})
fmt.Println(notOk) // false
fmt.Println(st.Values()) // 1, 2, 3
}
```
### <span id="Delete">Delete</span>
<p>Delete item in set</p>
<b>Signature:</b>
```go
func (s Set[T]) Delete(items ...T)
```
<b>Example:</b>
@@ -156,12 +227,12 @@ func main() {
### <span id="Contain">Contain</span>
<p>Check if value is in set or not</p>
<p>Check if item is in set or not</p>
<b>Signature:</b>
```go
func (s Set[T]) Contain(value T) bool
func (s Set[T]) Contain(item T) bool
```
<b>Example:</b>
@@ -308,7 +379,7 @@ func main() {
<b>Signature:</b>
```go
func (s Set[T]) Iterate(fn func(value T))
func (s Set[T]) Iterate(fn func(item T))
```
<b>Example:</b>
@@ -323,8 +394,8 @@ import (
func main() {
set1 := set.NewSet(1, 2, 3)
arr := []int{}
set.Iterate(func(value int) {
arr = append(arr, value)
set.Iterate(func(item int) {
arr = append(arr, item)
})
fmt.Println(arr) //1,2,3

View File

@@ -24,6 +24,8 @@ import (
- [NewSet](#NewSet)
- [Values](#Values)
- [Add](#Add)
- [AddIfNotExist](#AddIfNotExist)
- [AddIfNotExistBy](#AddIfNotExistBy)
- [Delete](#Delete)
- [Contain](#Contain)
- [ContainAll](#ContainAll)
@@ -50,7 +52,7 @@ import (
```go
type Set[T comparable] map[T]bool
func NewSet[T comparable](values ...T) Set[T]
func NewSet[T comparable](items ...T) Set[T]
```
<b>例子:</b>
@@ -104,7 +106,7 @@ func main() {
<b>函数签名:</b>
```go
func (s Set[T]) Add(values ...T)
func (s Set[T]) Add(items ...T)
```
<b>例子:</b>
@@ -125,6 +127,76 @@ func main() {
```
### <span id="AddIfNotExist">AddIfNotExist</span>
<p>如果集合中不存在元素则添加该元素返回true, 如果集合中存在元素, 不做任何操作返回false</p>
<b>函数签名:</b>
```go
func (s Set[T]) AddIfNotExist(item T) bool
```
<b>例子:</b>
```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)
r1 := st.AddIfNotExist(1)
r2 := st.AddIfNotExist(4)
fmt.Println(r1) // false
fmt.Println(r2) // true
fmt.Println(st.Values()) // 1,2,3,4
}
```
### <span id="AddIfNotExistBy">AddIfNotExistBy</span>
<p>根据checker函数判断元素是否在集合中如果集合中不存在元素且checker返回true则添加该元素返回true, 否则不做任何操作返回false</p>
<b>函数签名:</b>
```go
func (s Set[T]) AddIfNotExistBy(item T, checker func(element T) bool) bool
```
<b>例子:</b>
```go
package main
import (
"fmt"
set "github.com/duke-git/lancet/v2/datastructure/set"
)
func main() {
st := set.NewSet[int]()
st.Add(1, 2)
ok := st.AddIfNotExistBy(3, func(val int) bool {
return val%2 != 0
})
fmt.Println(ok) // true
notOk := st.AddIfNotExistBy(4, func(val int) bool {
return val%2 != 0
})
fmt.Println(notOk) // false
fmt.Println(st.Values()) // 1, 2, 3
}
```
### <span id="Delete">Delete</span>
<p>删除集合中元素</p>
@@ -132,7 +204,7 @@ func main() {
<b>函数签名:</b>
```go
func (s Set[T]) Delete(values ...T)
func (s Set[T]) Delete(items ...T)
```
<b>例子:</b>
@@ -161,7 +233,7 @@ func main() {
<b>函数签名:</b>
```go
func (s Set[T]) Contain(value T) bool
func (s Set[T]) Contain(item T) bool
```
<b>例子:</b>
@@ -308,7 +380,7 @@ func main() {
<b>函数签名:</b>
```go
func (s Set[T]) Iterate(fn func(value T))
func (s Set[T]) Iterate(fn func(item T))
```
<b>例子:</b>
@@ -323,8 +395,8 @@ import (
func main() {
set1 := set.NewSet(1, 2, 3)
arr := []int{}
set.Iterate(func(value int) {
arr = append(arr, value)
set.Iterate(func(item int) {
arr = append(arr, item)
})
fmt.Println(arr) //1,2,3
@@ -419,9 +491,6 @@ func main() {
```
### <span id="SymmetricDifference">SymmetricDifference</span>
<p>返回一个集合,其中元素在第一个集合或第二个集合中,且不同时存在于两个集合中</p>