package main
import (
"fmt"
"sort"
"strconv"
"strings"
)
func main() {
/* 对象排序 */
family := []Person{
{"Alice", 23},
{"Eve", 2},
{"Bob", 25},
}
sort.Sort(ByAge(family))
fmt.Println("排序结果为:", family) // [{Eve 2} {Alice 23} {Bob 25}]
familyA := []map[string]interface{}{}
familyA = append(familyA, map[string]interface{}{
"aaa": "sdsdsd",
"bbb": 25,
}, map[string]interface{}{
"aaa": "hahah",
"bbb": 22,
}, map[string]interface{}{
"aaa": "咋地?",
"bbb": 19,
})
sort.Sort(ByAgeA(familyA))
fmt.Println("map排序结果为:", familyA) // [{Eve 2} {Alice 23} {Bob 25}]
}
type Person struct {
Name string
Age int
}
type ByAge []Person
func (a ByAge) Len() int { return len(a) }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
/* map 排序 */
type ByAgeA []map[string]interface{}
func (a ByAgeA) Len() int { return len(a) }
func (a ByAgeA) Less(i, j int) bool {
_str1 := fmt.Sprintf("%#v", a[i]["bbb"])
_str2 := fmt.Sprintf("%#v", a[j]["bbb"])
_count1, _ := strconv.Atoi(_str1)
_count2, _ := strconv.Atoi(_str2)
return _count1 < _count2
}
func (a ByAgeA) Swap(i, j int) { a[i], a[j] = a[j], a[i] }