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) //“” +} +``` + + + ### MinReturn 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) //“” +} +``` + + + + ### Percentcalculate 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位小数