diff --git a/docs/mathutil.md b/docs/mathutil.md index c01e9ef..b13b096 100644 --- a/docs/mathutil.md +++ b/docs/mathutil.md @@ -25,7 +25,9 @@ import ( - [Fibonacci](#Fibonacci) - [Factorial](#Factorial) - [Max](#Max) +- [MaxBy](#MaxBy) - [Min](#Min) +- [MinBy](#MaxBy) - [Percent](#Percent) - [RoundToFloat](#RoundToFloat) @@ -177,6 +179,45 @@ func main() { + +### MaxBy +

Return the maximum value of a slice using the given comparator function.

+ +Signature: + +```go +func MaxBy[T any](slice []T, comparator func(T, T) bool) T +``` +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/mathutil" +) + +func main() { + res1 := mathutil.MaxBy([]string{"a", "ab", "abc"}, func(v1, v2 string) bool { + return len(v1) > len(v2) + }) + fmt.Println(res1) //abc + + res2 := mathutil.MaxBy([]string{"abd", "abc", "ab"}, func(v1, v2 string) bool { + return len(v1) > len(v2) + }) + fmt.Println(res2) //abd + + res3 := mathutil.MaxBy([]string{}, func(v1, v2 string) bool { + return len(v1) > len(v2) + }) + fmt.Println(res3) //“” +} +``` + + + ### Min

Return min value of numbers.

@@ -204,6 +245,45 @@ func main() { +### MinBy +

Return the minimum value of a slice using the given comparator function.

+ +Signature: + +```go +func MinBy[T any](slice []T, comparator func(T, T) bool) T +``` +Example: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/mathutil" +) + +func main() { + res1 := mathutil.MinBy([]string{"a", "ab", "abc"}, func(v1, v2 string) bool { + return len(v1) < len(v2) + }) + fmt.Println(res1) //a + + res2 := mathutil.MinBy([]string{"ab", "ac", "abc"}, func(v1, v2 string) bool { + return len(v1) < len(v2) + }) + fmt.Println(res2) //ab + + res3 := mathutil.MinBy([]string{}, func(v1, v2 string) bool { + return len(v1) < len(v2) + }) + fmt.Println(res3) //“” +} +``` + + + + ### Percent

calculate the percentage of val to total, retain n decimal places.

diff --git a/docs/mathutil_zh-CN.md b/docs/mathutil_zh-CN.md index 7f15247..278b1e7 100644 --- a/docs/mathutil_zh-CN.md +++ b/docs/mathutil_zh-CN.md @@ -25,7 +25,9 @@ import ( - [Fibonacci](#Fibonacci) - [Factorial](#Factorial) - [Max](#Max) +- [MaxBy](#MaxBy) - [Min](#Min) +- [MinBy](#MaxBy) - [Percent](#Percent) - [RoundToFloat](#RoundToFloat) @@ -174,6 +176,45 @@ func main() { +### MaxBy +

使用给定的比较器函数返回切片的最大值

+ +函数签名: + +```go +func MaxBy[T any](slice []T, comparator func(T, T) bool) T +``` +例子: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/mathutil" +) + +func main() { + res1 := mathutil.MaxBy([]string{"a", "ab", "abc"}, func(v1, v2 string) bool { + return len(v1) > len(v2) + }) + fmt.Println(res1) //abc + + res2 := mathutil.MaxBy([]string{"abd", "abc", "ab"}, func(v1, v2 string) bool { + return len(v1) > len(v2) + }) + fmt.Println(res2) //abd + + res3 := mathutil.MaxBy([]string{}, func(v1, v2 string) bool { + return len(v1) > len(v2) + }) + fmt.Println(res3) //“” +} +``` + + + + ### Min

返回参数中的最小数

@@ -201,6 +242,45 @@ func main() { +### MinBy +

使用给定的比较器函数返回切片的最小值

+ +函数签名: + +```go +func MinBy[T any](slice []T, comparator func(T, T) bool) T +``` +例子: + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/mathutil" +) + +func main() { + res1 := mathutil.MinBy([]string{"a", "ab", "abc"}, func(v1, v2 string) bool { + return len(v1) < len(v2) + }) + fmt.Println(res1) //a + + res2 := mathutil.MinBy([]string{"ab", "ac", "abc"}, func(v1, v2 string) bool { + return len(v1) < len(v2) + }) + fmt.Println(res2) //ab + + res3 := mathutil.MinBy([]string{}, func(v1, v2 string) bool { + return len(v1) < len(v2) + }) + fmt.Println(res3) //“” +} +``` + + + + ### Percent

计算百分比,保留n位小数