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] }