MST

星途 面试题库

面试题:Go语言自定义结构体切片按指定字段排序

假设有一个结构体 `Person`,包含字段 `Name string` 和 `Age int`。给定一个 `[]Person` 切片,要求编写代码按照 `Age` 字段进行降序排序,阐述排序过程中自定义排序函数的设计要点。
31.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "sort"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    people := []Person{
        {"Alice", 30},
        {"Bob", 25},
        {"Charlie", 35},
    }

    sort.Slice(people, func(i, j int) bool {
        return people[i].Age > people[j].Age
    })

    fmt.Println(people)
}

自定义排序函数设计要点

  1. 函数签名:排序函数需要接受两个索引参数 ij,这两个索引对应切片中的元素位置。函数返回一个布尔值,用于表示 i 索引对应的元素是否应该排在 j 索引对应的元素之前。
  2. 比较逻辑:在本题中,要实现按 Age 字段降序排序,所以当 people[i].Age > people[j].Age 时返回 true,即 i 位置的元素年龄大于 j 位置的元素年龄时,i 位置的元素排在 j 位置元素之前。如果是升序排序,则应改为 people[i].Age < people[j].Age
  3. 稳定性sort.Slice 使用的排序算法是不稳定的。如果需要稳定排序,可使用 sort.SliceStable 函数,其使用方式与 sort.Slice 类似,同样需要传入切片和自定义排序函数。