From d5607b0a5a368efad9fd68f942a05713f30e58c6 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Sun, 15 May 2022 18:15:05 +0800 Subject: [PATCH] feat: add MaxBy function --- mathutil/mathutil.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/mathutil/mathutil.go b/mathutil/mathutil.go index d8fe747..a0e38a9 100644 --- a/mathutil/mathutil.go +++ b/mathutil/mathutil.go @@ -106,6 +106,27 @@ func Max[T lancetconstraints.Number](numbers ...T) T { return max } +// MaxBy search the maximum value of a slice using the given comparator function. +func MaxBy[T any](slice []T, comparator func(T, T) bool) T { + var max T + + if len(slice) == 0 { + return max + } + + max = slice[0] + + for i := 1; i < len(slice); i++ { + val := slice[i] + + if comparator(val, max) { + max = val + } + } + + return max +} + // Min return min value of params func Min[T lancetconstraints.Number](numbers ...T) T { min := numbers[0]