35 lines
873 B
Go
35 lines
873 B
Go
// Package util provide some utility fun
|
|
package util
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
// MapSlice define func to build a new slice by applying f to every element of s.
|
|
func MapSlice[T, U any](s []T, f func(T) U) []U {
|
|
result := make([]U, 0, len(s))
|
|
for _, item := range s {
|
|
result = append(result, f(item))
|
|
}
|
|
return result
|
|
}
|
|
|
|
// ConvertZSetMembersToFloat64 define func to conver zset member type to float64
|
|
func ConvertZSetMembersToFloat64(members []redis.Z) []float64 {
|
|
// recovery time sorted in ascending order
|
|
sortRedisZByTimeMemberAscending(members)
|
|
return MapSlice(members, func(member redis.Z) float64 {
|
|
return member.Score
|
|
})
|
|
}
|
|
|
|
func sortRedisZByTimeMemberAscending(data []redis.Z) {
|
|
sort.Slice(data, func(i, j int) bool {
|
|
memberI := data[i].Member.(string)
|
|
memberJ := data[j].Member.(string)
|
|
return memberI < memberJ
|
|
})
|
|
}
|