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() 函数接受两个参数:要排序的切片和一个比较函数。
  • 比较函数接受两个整数参数 ij,表示切片中两个元素的索引。
  • 比较函数返回 true 表示 people[i] 应该排在 people[j] 的前面,否则 people[j] 应该排在 people[i] 的前面。
  • 在代码中,我们首先判断两个元素的 IsMale 值是否相同。如果不同,则将 IsMaletrue 的元素排在前面。如果相同,则按照年龄升序排列。

总结:

使用 sort.Slice() 函数和自定义比较函数,可以方便地对结构体切片进行排序,实现各种排序需求。

Golang:排序结构体切片,将 bool 值为 true 的元素放在前面

原文地址: https://www.cveoy.top/t/topic/f2qC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录