Go 通過結構體指定字段進行排序


對結構體指定字段進行排序:
  對結構體指定字段進行排序: 

package main
 
import (
    "fmt"
    "sort"
)
 
// 對結構體指定字段進行排序
type User struct {
    Name string `json:"name"` // `json:"xxx"`:在結構體和json字符串字段順序不一致的情況下:unmarshal根據tag去尋找對應字段的內容
    Age  int    `json:"age"`
}
 
// type Users []User
// func SortByAge(u Users) {
func SortByAge(u []User) {
    fmt.Printf("源數據:%+v\n", u)
 
    sort.Slice(u, func(i, j int) bool { // desc
        return u[i].Age > u[j].Age
    })
    fmt.Printf("按Age降序:%+v\n", u)
 
    sort.Slice(u, func(i, j int) bool { // asc
        return u[i].Age < u[j].Age
    })
    fmt.Printf("按Age升序:%+v\n", u)
}
 
func main() {
    // 初始化結構體對象數組:
    // 初始化方法1:
    // users := Users{
    //     {
    //         Name: "test1",
    //         Age:  22,
    //     },
    //     {
    //         Name: "test2",
    //         Age:  19,
    //     },
    //     {
    //         Name: "test3",
    //         Age:  25,
    //     },
    // }
 
    // 初始化方法2:
    var users []User
    var u User
    u.Name = "test1"
    u.Age = 22
    users = append(users, u)
    u.Name = "test2"
    u.Age = 20
    users = append(users, u)
    u.Name = "test3"
    u.Age = 26
    users = append(users, u)
 
    SortByAge(users)
}
 
// 輸出:
源數據:[{Name:test1 Age:22} {Name:test2 Age:20} {Name:test3 Age:26}]
按Age降序:[{Name:test3 Age:26} {Name:test1 Age:22} {Name:test2 Age:20}]
按Age升序:[{Name:test2 Age:20} {Name:test1 Age:22} {Name:test3 Age:26}]
 
此外也可使用sort.Sort()方法,不過需要自己去實現 Len()、Swap()、Less()方法,參考:golang對自定義類型排序

另外,通過借助“結構體指定字段進行排序”解了一道LeetCode 347題:傳送門

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM