Browse Source

增加map切片值顺序排序

master
loshiqi 2 years ago
parent
commit
4b5435e039
2 changed files with 51 additions and 2 deletions
  1. +40
    -0
      map.go
  2. +11
    -2
      map_test.go

+ 40
- 0
map.go View File

@ -202,3 +202,43 @@ func HttpBuildStringQuery(data map[string]string) string {
return strings.Trim(query, "&")
}
/**
* 对map切片 按值进行顺序
* @param order desc/asc MapDate []map[string]interface{}
* @2022/10/27
* @lo
*/
func MapSort(order, val string, MapDate []map[string]interface{}) ([]map[string]interface{}, error) {
type KVPair struct {
Key int
Val string
}
res := []map[string]interface{}{}
if order != "desc" && order != "asc" {
return res, errors.New("order parameter err")
}
if val == "" {
return res, errors.New("val parameter err")
}
if len(MapDate) < 1 {
return res, errors.New("MapDate parameter err")
}
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 // 降序
})
} else {
sort.Slice(tmpList, func(i, j int) bool {
return tmpList[i].Val < tmpList[j].Val // 升序
})
}
for _, tmp := range tmpList {
res = append(res, MapDate[tmp.Key])
}
return res, nil
}

+ 11
- 2
map_test.go View File

@ -6,10 +6,19 @@ import (
func Test_HttpBuildQuery(t *testing.T) {
list := map[string]string{"a": "b", "": "cdd", "b": ""}
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"}
list := []map[string]interface{}{}
list = append(list, a)
list = append(list, b)
list = append(list, c)
//ret := HttpBuildQuery(list)
ret, err := MapSort("asc", "name", list)
ret := HttpBuildQuery(list)
if err != nil {
}
t.Log(ret)
}

Loading…
Cancel
Save