golang sort.slice 多字段排序

语法介绍评论阅读2分47秒

在Go语言中,sort.Slice函数可以对任何切片进行排序,只要提供一个比较函数即可。以下是一个使用sort.Slice对结构体切片进行多字段排序的示例,结构体包含两个字段:Age(整数类型)和Name(字符串类型)。

package main  
  
import (  
	"fmt"  
	"sort"  
)  
  
// Person 结构体代表一个人,包含两个字段:Name 和 Age  
type Person struct {  
	Name string  
	Age  int  
}  
  
func main() {  
	// 创建一个Person类型的切片,并初始化一些数据  
	people := []Person{  
		{"Alice", 25},  
		{"Bob", 20},  
		{"Charlie", 30},  
		{"David", 20},  
		{"Eve", 25},  
	}  
  
	// 使用sort.Slice进行排序,先按Age升序排序,若Age相同则按Name升序排序  
	sort.Slice(people, func(i, j int) bool {  
		if people[i].Age != people[j].Age {  
			return people[i].Age < people[j].Age // 按Age升序排序  
		}  
		return people[i].Name < people[j].Name // 若Age相同,则按Name升序排序  
	})  
  
	// 输出排序后的结果  
	for _, p := range people {  
		fmt.Printf("%s: %d\n", p.Name, p.Age)  
	}  
}

在这个例子中,我们定义了一个Person结构体,它有两个字段:Name和Age。我们创建了一个Person类型的切片people,并使用sort.Slice来对其进行排序。排序逻辑是先按照Age字段升序排序,如果两个人的年龄相同,那么再按照Name字段升序排序。最后,我们打印出排序后的结果。文章源自Golang编程指南-https://www.va26.com/yufa/593.html

sort.Slice接受一个切片和一个比较函数作为参数。比较函数应该接受两个切片索引(i和j),并返回一个布尔值,该值表示切片中索引i的元素是否应该在排序后出现在索引j的元素之前。文章源自Golang编程指南-https://www.va26.com/yufa/593.html 文章源自Golang编程指南-https://www.va26.com/yufa/593.html

 
  • 本文由golang编程指南作者原创,请勿恶意转载!
  • 转载请务必保留本文链接:https://www.va26.com/yufa/593.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证