Golang中的map(映射)
是一种无序的基于 key-value
的数据结构,类似Python中的字典,内部使用散列表(hash表)
实现。除了常规的类型之外,还有两种较为复杂的类型:
其中,在使用元素为map的slice
时应当注意,完成slice的初始化之后,还是不能直接对其元素进行赋值等操作,因为此时的map元素还未进行初始化,所以无法赋值。应当先用make函数初始化map,然后才可以赋值。例如:
package main
import "fmt"
// 复杂类型的map
func main() {
// 1.元素类型为map的切片
// 初始化一个以map为元素的切片
var mapSlice = make([]map[string]int, 4, 8) // 只完成了slice的初始化,map仍然是nil
fmt.Println(mapSlice)
// mapSlice[0]["Albert"] = 666 // 此时还无法赋值,因为map还未初始化
// 此时slice实际上是 [nil nil nil nil nil nil nil nil]
// 完成slice内部map元素的初始化
mapSlice[0] = make(map[string]int, 4)
// 初始化map之后,才可以对slice内部的map元素进行赋值操作
mapSlice[0]["Albert"] = 650
mapSlice[0]["John"] = 620
fmt.Println(mapSlice)
// 使用append函数为slice添加新的map元素,由于是map元素,所以仍然要注意先用make初始化
map1 := make(map[string]int)
mapSlice = append(mapSlice, map1) // 将新的map元素添加到slice中
fmt.Println(mapSlice)
map1["Bob"] = 630
fmt.Println(mapSlice)
// 2.值为切片类型的map (比map类型的切片简单些)
var m1 = make(map[string][]int, 10) // 初始化一个map
m1["数学"] = []int{145, 137, 140} // 为map中的slice元素赋值
fmt.Println(m1)
m1["语文"] = []int{132, 120, 125}
fmt.Println(m1)
}
运行结果如下,
参与评论
手机查看
返回顶部