golang中的map

1. 声明与初始化

	// map的声明与初始化
	userInfo := map[string]string{"name": "马亚南", "age": "18"}
	fmt.Println(userInfo)
	fmt.Println(userInfo["name"])  // 马亚南
	userInfo["age"] = "28"
	fmt.Println(userInfo)
	userInfo["email"] = "wupeiqi@live.com"
	fmt.Println(userInfo)

	// 声明
	var userInfo2 = map[string]string{}
	userInfo2["age"] = "88"
	fmt.Println(userInfo2)

	// make创建map
	data := make(map[int]int)
	data[100] = 998
	data[200] = 999
	fmt.Println(data)

	// 只有声明,nil ,无法设置
	var row map[int]int  // 这种声明用于整体的赋值
	//row["name"] = 666  // 错误的
	row = data
	fmt.Println(row)

	// new创建map, nil
	// 这种声明也是用于整体的赋值,但是赋值的是map的指针类型
	value := new(map[int]int)
	value = &data
	fmt.Println(*value)

  // 注意:键不重复、键必须可哈希(int/bool/float/string/array),map是无序的

	v1 := make(map[[2]int]float32)
	v1[[2]int{11, 22}] = 3.15
	v1[[2]int{33, 44}] = 2.88
	fmt.Println(v1)

  

2. map的长度和容量

	// 1. 长度和容量
	data := map[string]string{"n1": "武沛齐", "n2": "alex"}
	fmt.Println(len(data))

	// 2. make创建map并且指定了容量cap
	// 根据参数值10,计算出合适的容量
	// 一个map中会包含很多的桶,每个桶中可以存放8个键值对
	info := make(map[string]string, 10)
	info["n1"] = "武沛齐"
	info["n2"] = "alex"

	fmt.Println(len(info))
	//fmt.Println(cap(info))  报错

 

3.  map中value的嵌套用法

	// value中的嵌套
	// map的值可以使任意类型
	// 值是数组类型
	v4 := make(map[string][]int)
	v4["n1"] = []int{11, 22, 33, 44, 55}
	v4["n2"] = []int{11, 22}
	fmt.Println(v4)

	// 值是map类型
	v5 := make(map[string]map[int]int)
	v5["n1"] = map[int]int{1: 999, 2: 888}
	v5["n2"] = map[int]int{11: 99, 22: 88}
	fmt.Println(v5)

	// 值是数组类型,值得数组中存储的是map类型
	v7 := make(map[string][2]map[string]string)
	v7["n11"] = [2]map[string]string{{"name": "马亚南"}, {"name": "马馨彤"}}
	v7["n12"] = [2]map[string]string{{"age": "18"}, {"age": "28"}}
	fmt.Println(v7)

  

4.  map的增删改查

	data := map[string]string{"n1": "武沛齐", "n2": "alex"}
	// 增加
	data["n3"] = "eric"
	// 修改
	data["n1"] = "武沛齐2"
	// 删除
	delete(data, "n2")
	// 查看
	fmt.Println(data["n1"])
	// 循环查看键值对
	for key, value := range data {
		fmt.Println(key, value)
	}
	// 循环查看键
	for key := range data {
		fmt.Println(key)
	}
	// 循环查看值
	for _, value := range data {
		fmt.Println(value)
	}

  

5.  map中键的嵌套

	// 键不重复 & 键必须可哈希
	data1 := make(map[int]int)
	data2 := make(map[bool]int)
	data3 := make(map[float32]int)
	data4 := make(map[string]int)
	data5 := make(map[[2]int]int)
	//data6 := make(map[[]int]int)  // 错误, 不可哈希
	//data7 := make(map[map[int]int]int)  // 错误, 不可哈希
	//data8 := make(map[ [2]map[string]string ]int)  // 错误, 虽然键是数组,但是数组里面的值是map,所以不可哈希

  

6.  map中变量赋值

	// 变量赋值,
	map1 := map[string]string{"n1": "武沛齐", "n2": "alex"}
	map2 := map1

	map1["n1"] = "哈哈"
	fmt.Println(map1)
	fmt.Println(map2)
特别提醒:map中无论是否存在扩容,都指向同一个地址

posted @ 2021-10-07 18:54  专职  阅读(74)  评论(0编辑  收藏  举报