From 9377182985cdd7424a219ff6709835a7be2b875a Mon Sep 17 00:00:00 2001 From: azw Date: Sat, 19 Aug 2023 20:52:10 +0800 Subject: [PATCH] 1 --- functional.go | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ sysutils.go | 4 ++++ 2 files changed, 67 insertions(+) create mode 100644 functional.go diff --git a/functional.go b/functional.go new file mode 100644 index 0000000..26b0ff9 --- /dev/null +++ b/functional.go @@ -0,0 +1,63 @@ +package q5 + +func Map[T any](arr []T, cb func(T) T) []T { + newList := []T{} + for _, val := range arr { + newList = append(newList, cb(val)) + } + return newList +} + +func Reduce[T any](arr []T, cb func(T, T) T, initVal *T) T { + var result T + if initVal != nil { + result = *initVal + } + if len(arr) > 0 { + if initVal == nil { + result = arr[0] + for i := 1; i < len(arr); i++ { + result = cb(result, arr[i]) + } + } else { + for i := 0; i < len(arr); i++ { + result = cb(result, arr[i]) + } + } + } + return result +} + +func Filter[T any](arr []T, cb func(T) bool) []T { + newList := []T{} + for _, val := range arr { + if cb(val) { + newList = append(newList, val) + } + } + return newList +} + +func Max[T string | int | int32 | int64 | float32 | float64](a T, b T) T { + if a < b { + return b + } else { + return a + } +} + +func Min[T string | int | int32 | int64 | float32 | float64](a T, b T) T { + if a < b { + return a + } else { + return b + } +} + +func ToInterfaces[T any](values []T) []interface{} { + result := []interface{}{} + for _, val := range values { + result = append(result, val) + } + return result +} diff --git a/sysutils.go b/sysutils.go index 17eb523..969800d 100644 --- a/sysutils.go +++ b/sysutils.go @@ -130,3 +130,7 @@ func FormatUnixDateEx(sec int64) string { strTime := time.Unix(sec, 0).Format("20060102") return strTime } + +func TraverseSlice[T any](arr []T, cb func (T)) { + +}