Browse Source

map切片排序需增加排序值类型

master v0.5.5
loshiqi 2 years ago
parent
commit
3eb178421d
2 changed files with 38 additions and 18 deletions
  1. +34
    -14
      map.go
  2. +4
    -4
      map_test.go

+ 34
- 14
map.go View File

@ -205,19 +205,23 @@ func HttpBuildStringQuery(data map[string]string) string {
/** /**
* 对map切片 按值进行顺序 * 对map切片 按值进行顺序
* @param order desc/asc MapDate []map[string]interface{}
* @param order desc/asc val_type float64/string MapDate []map[string]interface{}
* @2022/10/27 * @2022/10/27
* @lo * @lo
*/ */
func MapSort(order, val string, MapDate []map[string]interface{}) ([]map[string]interface{}, error) {
func MapSort(order, val, val_type string, MapDate []map[string]interface{}) ([]map[string]interface{}, error) {
type KVPair struct { type KVPair struct {
Key int
Val string
Key int
Val_float64 float64
val_string string
} }
res := []map[string]interface{}{} res := []map[string]interface{}{}
if order != "desc" && order != "asc" { if order != "desc" && order != "asc" {
return res, errors.New("order parameter err") return res, errors.New("order parameter err")
} }
if val_type != "float64" && val_type != "string" {
return res, errors.New("val_type parameter err")
}
if val == "" { if val == "" {
return res, errors.New("val parameter err") return res, errors.New("val parameter err")
} }
@ -225,17 +229,33 @@ func MapSort(order, val string, MapDate []map[string]interface{}) ([]map[string]
return res, errors.New("MapDate parameter err") return res, errors.New("MapDate parameter err")
} }
tmpList := []KVPair{} tmpList := []KVPair{}
for k, item := range MapDate {
tmpList = append(tmpList, KVPair{Key: k, Val: ToStr(item[val])})
}
if order == "desc" {
sort.Slice(tmpList, func(i, j int) bool {
return tmpList[i].Val > tmpList[j].Val // 降序
})
if val_type == "string" {
for k, item := range MapDate {
tmpList = append(tmpList, KVPair{Key: k, val_string: ToStr(item[val])})
}
if order == "desc" {
sort.Slice(tmpList, func(i, j int) bool {
return tmpList[i].val_string > tmpList[j].val_string // 降序
})
} else {
sort.Slice(tmpList, func(i, j int) bool {
return tmpList[i].val_string < tmpList[j].val_string // 升序
})
}
} else { } else {
sort.Slice(tmpList, func(i, j int) bool {
return tmpList[i].Val < tmpList[j].Val // 升序
})
for k, item := range MapDate {
float64_val, _ := ToFloat64(item[val])
tmpList = append(tmpList, KVPair{Key: k, Val_float64: float64_val})
}
if order == "desc" {
sort.Slice(tmpList, func(i, j int) bool {
return tmpList[i].Val_float64 > tmpList[j].Val_float64 // 降序
})
} else {
sort.Slice(tmpList, func(i, j int) bool {
return tmpList[i].Val_float64 < tmpList[j].Val_float64 // 升序
})
}
} }
for _, tmp := range tmpList { for _, tmp := range tmpList {
res = append(res, MapDate[tmp.Key]) res = append(res, MapDate[tmp.Key])


+ 4
- 4
map_test.go View File

@ -6,15 +6,15 @@ import (
func Test_HttpBuildQuery(t *testing.T) { func Test_HttpBuildQuery(t *testing.T) {
a := map[string]interface{}{"id": "1", "name": "8","price":"2.3"}
b := map[string]interface{}{"id": "2", "name": "7","price":"2.8"}
c := map[string]interface{}{"id": "3", "name": "9","price":"2.1"}
a := map[string]interface{}{"id": "11", "name": "8", "price": "2.3"}
b := map[string]interface{}{"id": "4", "name": "7", "price": "2.8"}
c := map[string]interface{}{"id": "3", "name": "9", "price": "2.1"}
list := []map[string]interface{}{} list := []map[string]interface{}{}
list = append(list, a) list = append(list, a)
list = append(list, b) list = append(list, b)
list = append(list, c) list = append(list, c)
//ret := HttpBuildQuery(list) //ret := HttpBuildQuery(list)
ret, err := MapSort("asc", "name", list)
ret, err := MapSort("desc", "id", "float64", list)
if err != nil { if err != nil {


Loading…
Cancel
Save