~~~
以下排序是无问题(只处理max的值正常)
但是如果我把 注释的id也加进去 , 那么请问如何来排序 id+max这种 呢,(主要计算max来排序,但是保留id的值)
func SortsStringMap(m []map[string]string) []map[string]string {
type KeyValuePair struct {
Key string
Value string
}
var kvPairs []KeyValuePair
for _, m := range m {
for k, v := range m {
kvPairs = append(kvPairs, KeyValuePair{Key: k, Value: v})
}
}
// 按Value排序
sort.Slice(kvPairs, func(i, j int) bool {
return kvPairs[i].Value < kvPairs[j].Value
})
sortedMapSlice := make([]map[string]string, 0)
for i, kv := range kvPairs {
if len(sortedMapSlice) == i {
sortedMapSlice = append(sortedMapSlice, map[string]string{})
}
sortedMapSlice[i][kv.Key] = kv.Value
}
return sortedMapSlice
}
func main(){
var arrs []map[string]string
arrs = append(arrs, map[string]string{
// "id": "1",
"max": "102",
})
arrs = append(arrs, map[string]string{
// "id": "2",
"max": "103",
})
arrs = append(arrs, map[string]string{
// "id": "3",
"max": "101",
})
fmt.Println(SortsStringMap(arrs))
}
~~~
```go
func SortsStringMap(ms []map[string]string) []map[string]string {
slices.SortFunc(ms, func(a, b map[string]string) int {
return cmp.Or(
// 先排max,再排id。仍不能区分则视为相同,顺序随机。
cmp.Compare(a["max"], b["max"]),
cmp.Compare(a["id"], b["id"]),
)
})
return ms
}
```
#1