This commit is contained in:
azw 2023-08-19 20:52:10 +08:00
parent b343ad660a
commit 9377182985
2 changed files with 67 additions and 0 deletions

63
functional.go Normal file
View File

@ -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
}

View File

@ -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)) {
}