Golang:排序结构体切片,将 bool 值为 true 的元素放在前面
Golang:排序结构体切片,将 bool 值为 true 的元素放在前面
在 Golang 中,可以使用 sort.Slice() 函数对切片进行排序,结合自定义的比较函数来实现按照 bool 值排序。
示例代码:
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
IsMale bool
}
func main() {
people := []Person{
{"Alice", 25, true},
{"Bob", 30, false},
{"Charlie", 20, true},
{"David", 35, false},
{"Eve", 28, true},
}
sort.Slice(people, func(i, j int) bool {
if people[i].IsMale != people[j].IsMale {
// 如果 bool 值不同,将 true 的排在前面
return people[i].IsMale
}
// 如果 bool 值相同,按照年龄升序排列
return people[i].Age < people[j].Age
})
fmt.Println(people)
}
输出结果:
[{Alice 25 true} {Charlie 20 true} {Eve 28 true} {Bob 30 false} {David 35 false}]
可以看到,bool 值为 true 的人已经排在了切片的前面。
解释:
sort.Slice()函数接受两个参数:要排序的切片和一个比较函数。- 比较函数接受两个整数参数
i和j,表示切片中两个元素的索引。 - 比较函数返回
true表示people[i]应该排在people[j]的前面,否则people[j]应该排在people[i]的前面。 - 在代码中,我们首先判断两个元素的
IsMale值是否相同。如果不同,则将IsMale为true的元素排在前面。如果相同,则按照年龄升序排列。
总结:
使用 sort.Slice() 函数和自定义比较函数,可以方便地对结构体切片进行排序,实现各种排序需求。
原文地址: https://www.cveoy.top/t/topic/f2qC 著作权归作者所有。请勿转载和采集!