面试题答案
一键面试-
实现思路:
- 首先将
map[string]struct{Name string; Age int}
类型的映射转换为切片,因为Go语言的标准库排序函数是针对切片的。 - 定义一个比较函数,该函数先比较
Age
字段,如果Age
相同再比较Name
字段。 - 使用Go标准库的
sort.Slice
函数对切片进行排序。
- 首先将
-
Go代码如下:
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
personMap := map[string]Person{
"p1": {"Alice", 25},
"p2": {"Bob", 20},
"p3": {"Charlie", 25},
}
// 转换为切片
var people []struct {
Key string
Person Person
}
for k, v := range personMap {
people = append(people, struct {
Key string
Person Person
}{Key: k, Person: v})
}
// 定义比较函数
sort.Slice(people, func(i, j int) bool {
if people[i].Person.Age != people[j].Person.Age {
return people[i].Person.Age > people[j].Person.Age
}
return people[i].Person.Name < people[j].Person.Name
})
// 输出排序后的结果
for _, p := range people {
fmt.Printf("Key: %s, Name: %s, Age: %d\n", p.Key, p.Person.Name, p.Person.Age)
}
}