Skip to content

Commit 090ea8c

Browse files
committed
feat: add slice
Signed-off-by: yuluo-yx <yuluo08290126@gmail.com>
1 parent 10eb9cc commit 090ea8c

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

.github/workflows/lint.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
name: lint.yml
2+
on:
3+
4+
jobs:

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ go.work.sum
2828
.env
2929

3030
# Editor/IDE
31-
.idea/
32-
.vscode/
31+
.idea/
32+
.vscode/

grammar/slice/main.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,41 @@
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+
}

0 commit comments

Comments
 (0)