曹耘豪的博客

Go的常用数据结构

  1. 数组
    1. 创建
  2. slice
    1. 创建
    2. 增加
    3. 截取
  3. map
    1. 创建
    2. 取值
    3. 获取key slice
  4. range
    1. 对array、slice
    2. 对map
    3. 对string

数组

创建

只能是固定大小(代码写死或const变量)

1
2
numbers := [5]int{}  // [0 0 0 0 0]
numbers := [5]int{1} // [1 0 0 0 0]

slice

创建

1
2
numbers := make([]int, 0) // []
numbers := make([]int, 1) // [0]

增加

使用append

1
2
3
4
5
numbers := make([]int, 1)    // [0]
numbers = append(numbers, 1) // [0 1]

// 可以添加多个
numbers = append(numbers, 2, 3) // [0 1 2 3]
1
2
3
4
5
6
7
8
9
// 发生扩容
arr := make([]int, 1, 1) // 指定cap=1
arr1 := append(arr, 1)
arr1[0] = 100 // 此时arr[0]=0

// 未发生扩容
arr := make([]int, 1, 2) // 初始化cap为2
arr1 := append(arr, 1)
arr1[0] = 100 // 此时arr[0]=100

截取

类似python

前闭后开

1
newSlice := oldSlice[beginInclude: endExclude]

map

创建

使用make

1
2
m := make(map[int]int)
m[1] = 2

使用字面量

1
2
3
m := map[int]int {
1: 2,
}

取值

1
2
m[1]  // 2
m[-1] // 0

获取key slice

1
2
3
4
5
6
func KeySlice(m map[int]int) (arr []int) {
for k, _ := range m {
arr = append(arr, k)
}
return arr
}

range

用于循环

对array、slice

1
2
3
4
5
6
7
for i, v := range arr {

}

for i, v := range slice {

}

对map

1
2
3
for k, v := range m {

}

对string

1
2
3
for i, v := range m {

}
   /