File tree Expand file tree Collapse file tree 3 files changed +47
-3
lines changed
Expand file tree Collapse file tree 3 files changed +47
-3
lines changed Original file line number Diff line number Diff line change 1+ name : lint.yml
2+ on :
3+
4+ jobs :
Original file line number Diff line number Diff line change @@ -28,5 +28,5 @@ go.work.sum
2828.env
2929
3030# Editor/IDE
31- .idea /
32- .vscode /
31+ .idea /
32+ .vscode /
Original file line number Diff line number Diff line change 1- package slice
1+ package main
2+
3+ import (
4+ "fmt"
5+ "slices"
6+ "strings"
7+ )
8+
9+ func main () {
10+
11+ type Member struct {
12+ ID int
13+ Name string
14+ Age int
15+ }
16+
17+ members := []* Member {
18+ {ID : 3 , Name : "Bb" , Age : 30 },
19+ {ID : 2 , Name : "Aa" , Age : 25 },
20+ {ID : 1 , Name : "Cc" , Age : 35 },
21+ }
22+
23+ idMap := make (map [int ]* Member )
24+ for idx := range members {
25+ idMap [members [idx ].ID ] = members [idx ]
26+ }
27+
28+ // 需求:按照 Name 字段进行排序
29+ // 输出 id 为 2 的字符串名是哪个?预期应该是 Aa
30+ // 但是实际输出是 3 Bb?
31+ // slices sort 函数是原地交换排序
32+ // slice 是一块连续的内存空间,那原地交换排序就是
33+ // 直接在这块内存空间上进行交换,则 map 中的指针就会指向错误的地址。
34+ // 解决方法是 slice 换成 []*Member 类型,直接对指针交换。或者使用 sort.Slice 函数 等其他方法
35+ slices .SortFunc (members , func (a , b * Member ) int {
36+ // 按照字典序排列
37+ return strings .Compare (a .Name , b .Name )
38+ })
39+
40+ fmt .Println (idMap [2 ])
41+ }
You can’t perform that action at this time.
0 commit comments