下面是一个示例代码,演示如何按指定字段对结构体切片进行排序:
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
Score float64
}
type ByAge []Person
func (a ByAge) Len() int { return len(a) }
func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
type ByScore []Person
func (a ByScore) Len() int { return len(a) }
func (a ByScore) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByScore) Less(i, j int) bool { return a[i].Score < a[j].Score }
func main() {
people := []Person{
{"Alice", 25, 90.5},
{"Bob", 30, 85.0},
{"Charlie", 20, 95.5},
}
fmt.Println("按年龄排序前:", people)
sort.Sort(ByAge(people))
fmt.Println("按年龄排序后:", people)
fmt.Println("按分数排序前:", people)
sort.Sort(ByScore(people))
fmt.Println("按分数排序后:", people)
}
在这个示例中,我们定义了一个 Person
结构体,其中包含了姓名、年龄和分数。然后,我们分别定义了两个排序类型 ByAge
和 ByScore
,它们分别实现了 sort.Interface
接口的三个方法:Len()
、Swap()
和 Less()
。
在 main()
函数中,我们创建了一个包含三个 Person
实例的切片 people
。首先,我们使用 ByAge(people)
对切片进行排序,按照年龄从小到大进行排序。然后,我们使用 ByScore(people)
对切片进行排序,按照分数从小到大进行排序。
最后,我们打印出排序后的切片,以验证排序结果是否正确。
下一篇:按值获取单元格