1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package tool
- import (
- "github.com/gin-gonic/gin"
- "sort"
- "time"
- )
- type MapsSort struct {
- Key string
- Type string
- Order string
- MapList []gin.H
- }
- func boolToInt(b bool) int {
- if b {
- return 1
- }
- return 0
- }
- func (m MapsSort) Len() int {
- return len(m.MapList)
- }
- func (m MapsSort) Less(i, j int) bool {
- flag := false
- if m.Type == "int" {
- flag = m.MapList[i][m.Key].(int) > m.MapList[j][m.Key].(int)
- } else if m.Type == "bool" {
- flag = boolToInt(m.MapList[i][m.Key].(bool)) > boolToInt(m.MapList[j][m.Key].(bool))
- } else if m.Type == "bool" {
- flag = m.MapList[i][m.Key].(string) > m.MapList[j][m.Key].(string)
- } else if m.Type == "time" {
- flag = m.MapList[i][m.Key].(time.Time).After(m.MapList[j][m.Key].(time.Time))
- }
- if m.Order == "asc" {
- flag = !flag
- }
- return flag
- }
- func (m MapsSort) Swap(i, j int) {
- m.MapList[i], m.MapList[j] = m.MapList[j], m.MapList[i]
- }
- func Sort(key string, order string, Type string, maps []gin.H) []gin.H {
- mapsSort := MapsSort{
- Key: key,
- MapList: maps,
- Type: Type,
- Order: order,
- }
- sort.Sort(mapsSort)
- return mapsSort.MapList
- }
|