diff --git a/README.md b/README.md index 23d9e60..553b844 100644 --- a/README.md +++ b/README.md @@ -396,6 +396,7 @@ import "github.com/duke-git/lancet/v2/slice" - [StringSlice](https://github.com/duke-git/lancet/blob/main/docs/slice.md#StringSlice) - [SymmetricDifference](https://github.com/duke-git/lancet/blob/main/docs/slice.md#SymmetricDifference) - [Unique](https://github.com/duke-git/lancet/blob/main/docs/slice.md#Unique) +- [UniqueBy](https://github.com/duke-git/lancet/blob/main/docs/slice.md#UniqueBy) - [Union](https://github.com/duke-git/lancet/blob/main/docs/slice.md#Union) - [UpdateAt](https://github.com/duke-git/lancet/blob/main/docs/slice.md#UpdateAt) - [Without](https://github.com/duke-git/lancet/blob/main/docs/slice.md#Without) diff --git a/README_zh-CN.md b/README_zh-CN.md index b18efa3..8f428f7 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -391,6 +391,7 @@ import "github.com/duke-git/lancet/v2/slice" - [StringSlice](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#StringSlice) - [SymmetricDifference](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#SymmetricDifference) - [Unique](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Unique) +- [UniqueBy](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#UniqueBy) - [Union](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Union) - [UpdateAt](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#UpdateAt) - [Without](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Without) diff --git a/docs/slice.md b/docs/slice.md index fdbef94..cdc98ff 100644 --- a/docs/slice.md +++ b/docs/slice.md @@ -57,6 +57,7 @@ import ( - [StringSlice](#StringSlice) - [SymmetricDifference](#SymmetricDifference) - [Unique](#Unique) +- [UniqueBy](#UniqueBy) - [Union](#Union) - [UpdateAt](#UpdateAt) - [Without](#Without) @@ -1086,7 +1087,33 @@ func main() { -### Unique +### UniqueBy +
Call iteratee func with every item of slice, then remove duplicated.
+ +Signature: + +```go +func UniqueBy[T any](slice []T, iteratee func(item T) T) []T +``` +Example: + +```go +import ( + "fmt" + "github.com/duke-git/lancet/slice" +) + +func main() { + res := slice.UniqueBy([]int{1, 2, 3, 4, 5, 6}, func(val int) int { + return val % 4 + }) + fmt.Println(res) //[]int{1, 2, 3, 0} +} +``` + + + +### UnionCreates a slice of unique values, in order, from all given slices. using == for equality comparisons.
Signature: diff --git a/docs/slice_zh-CN.md b/docs/slice_zh-CN.md index 2fa7846..699212f 100644 --- a/docs/slice_zh-CN.md +++ b/docs/slice_zh-CN.md @@ -57,6 +57,7 @@ import ( - [StringSlice](#StringSlice) - [SymmetricDifference](#SymmetricDifference) - [Unique](#Unique) +- [UniqueBy](#UniqueBy) - [Union](#Union) - [UpdateAt](#UpdateAt) - [Without](#Without) @@ -1085,7 +1086,33 @@ func main() { -### Unique +### UniqueBy +对切片的每个元素调用iteratee函数,然后删除重复元素
+ +函数签名: + +```go +func UniqueBy[T any](slice []T, iteratee func(item T) T) []T +``` +例子: + +```go +import ( + "fmt" + "github.com/duke-git/lancet/slice" +) + +func main() { + res := slice.UniqueBy([]int{1, 2, 3, 4, 5, 6}, func(val int) int { + return val % 4 + }) + fmt.Println(res) //[]int{1, 2, 3, 0} +} +``` + + + +### Union从所有给定的切片按顺序创建一个唯一值切片,使用==进行相等比较
函数签名: