1
This commit is contained in:
parent
b343ad660a
commit
9377182985
63
functional.go
Normal file
63
functional.go
Normal 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
|
||||
}
|
@ -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)) {
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user