golang結(jié)構(gòu)體slice排序方式
更新時間:2025年12月31日 09:36:13 作者:YZF_Kevin
go語言的slice()不僅可以對int類型的數(shù)組進行排序,還可以對struct類型的數(shù)組進行排序,排序函數(shù)包括Slice()、SliceStable()和SliceIsSorted(),結(jié)構(gòu)體可以定義為更復(fù)雜的類型
golang結(jié)構(gòu)體slice排序
go語言的slice()不僅僅可以對int類型的數(shù)組進行排序,還可以對struct類型的數(shù)組進行排序
排序函數(shù)
- 1. Slice() 不穩(wěn)定排序
- 2. SliceStable() 穩(wěn)定排序
- 3. SliceIsSorted() 判斷是否已排序
結(jié)構(gòu)體定義如下,我們完全可以定義更復(fù)雜的結(jié)構(gòu)體:
// 結(jié)構(gòu)體定義
type test struct {
value int
str string
}結(jié)果

完整代碼
package main
import (
"fmt"
"sort"
)
// 結(jié)構(gòu)體定義
type test struct {
value int
str string
}
func main() {
s := make([]test, 5)
s[0] = test{value: 2, str: "test2"}
s[1] = test{value: 4, str: "test4"}
s[2] = test{value: 1, str: "test1"}
s[3] = test{value: 5, str: "test5"}
s[4] = test{value: 3, str: "test3"}
fmt.Println("初始化結(jié)果:")
fmt.Println(s)
// 從小到大排序(不穩(wěn)定排序)
sort.Slice(s, func(i, j int) bool {
if s[i].value < s[j].value {
return true
}
return false
})
fmt.Println("\n從小到大排序結(jié)果:")
fmt.Println(s)
// 從小到大排序(穩(wěn)定排序)
sort.SliceStable(s, func(i, j int) bool {
if s[i].value < s[j].value {
return true
}
return false
})
// 是否從小到大排序
bLess := sort.SliceIsSorted(s, func(i, j int) bool {
if s[i].value < s[j].value {
return true
}
return false
})
fmt.Printf("數(shù)組s是否從小到大排序,bLess:%v\n", bLess)
// 從大到小排序(不穩(wěn)定排序)
sort.Slice(s, func(i, j int) bool {
if s[i].value > s[j].value {
return true
}
return false
})
fmt.Println("\n從大到小排序結(jié)果:")
fmt.Println(s)
// 是否從大到小排序
bMore := sort.SliceIsSorted(s, func(i, j int) bool {
if s[i].value > s[j].value {
return true
}
return false
})
fmt.Printf("數(shù)組s是否從大到小排序,bMore:%v\n", bMore)
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Golang設(shè)計一套可控的定時任務(wù)系統(tǒng)
這篇文章主要為大家學(xué)習(xí)介紹了如何基于Golang設(shè)計一套可控的定時任務(wù)系統(tǒng),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07

