数组 Array
数组 Array
数组是最基本的数据结构,但是并不常用,了解即可。
package main
import "fmt"
func main() {
// 数组:长度固定,元素类型相同
var nums [3]int = [3]int{10, 20, 30}
// 通过下标访问元素,下标从 0 开始
fmt.Println(nums[0])
fmt.Println(nums[1])
fmt.Println(nums[2])
// 可以通过下标直接修改数组中的元素
nums[1] = 99
fmt.Println("修改后的数组:", nums)
// 可以通过 len 获取数组长度
fmt.Println("数组长度:", len(nums))
// 使用 for 遍历数组
for i, v := range nums {
fmt.Printf("下标:%d,值:%d\n", i, v)
}
}:::success
数组存在一个问题:定长。如果我们不知道长度,并且可能还会增加内容,该怎么办?
:::
切片 Slice
重要
这是最常用的数据类型,必知必会。
package main
import "fmt"
func main() {
// 切片:长度可变,元素类型相同
var nums []int = []int{10, 20, 30}
// 通过下标访问元素,下标从 0 开始
fmt.Println(nums[0])
fmt.Println(nums[1])
fmt.Println(nums[2])
// 可以通过下标直接修改切片中的元素
nums[1] = 99
fmt.Println("修改后的切片:", nums)
// 使用 append 向切片中追加元素
nums = append(nums, 40, 50)
fmt.Println("追加后的切片:", nums)
// 可以通过 len 获取切片长度
fmt.Println("切片长度:", len(nums))
// 使用 for 遍历切片
for i, v := range nums {
fmt.Printf("下标:%d,值:%d\n", i, v)
}
// 另一种声明方法
nums1 := []int{40, 50, 60}
fmt.Println(nums1)
//推荐方法
// make make([]类型, 初始容量)
nums2 := make([]int, 0)
nums2 = append(nums2, 1, 2, 3, 4, 5)
fmt.Println(nums2)
fmt.Println("nums2 的长度:", len(nums2))
fmt.Println("nums2 的容量:", cap(nums2))
// 截取下标 0 到 3 之前的元素,结果包含 0、1、2
num3 := nums2[0:3]
fmt.Println(num3)
fmt.Println("num3 的长度:", len(num3))
fmt.Println("num3 的容量:", cap(num3))
// 从下标 3 开始截取,一直到最后
num4 := nums2[3:]
fmt.Println(num4)
fmt.Println("num4 的长度:", len(num4))
fmt.Println("num4 的容量:", cap(num4))
// 三下标切片:[起始下标:结束下标:容量上限]
// 长度是 4-0=4,容量是 5-0=5
num5 := nums2[0:4:5]
fmt.Println(num5)
fmt.Println("num5 的长度:", len(num5))
fmt.Println("num5 的容量:", cap(num5))
}Map
:::success
这个数据类型并不常用,但面试经常考察。
:::
package main
import "fmt"
func main() {
// map:键值对类型,键必须唯一
// 方式 1:直接初始化
user := map[string]int{
"age": 18,
"score": 100,
}
fmt.Println(user)
// 方式 2:使用 make 创建 map
cityCode := make(map[string]int)
cityCode["beijing"] = 10
cityCode["shanghai"] = 21
fmt.Println(cityCode)
// 通过 key 读取值
fmt.Println("age =", user["age"])
// 修改 map 中已有的值
user["age"] = 20
fmt.Println("修改后的 user =", user)
// 新增键值对
user["level"] = 3
fmt.Println("新增后的 user =", user)
// 判断 key 是否存在
score, ok := user["score"]
fmt.Println("score =", score, "是否存在 =", ok)
// 删除键值对
delete(user, "score")
fmt.Println("删除后的 user =", user)
// 获取 map 长度
fmt.Println("user 的长度:", len(user))
// 遍历 map
for k, v := range user {
fmt.Printf("key:%s,value:%d\n", k, v)
}
}