golang中的map

二话不说,撸码吧

package main

import (
	"fmt"
)

/**
 *  @Description:golang中的map
 *  @Author: guai
 *  @Date:2020/2/22 11:28
**/
func main() {
	//1、map
	//map是key-value数据结构,又称为字段或者关联数组,类似其他语言中的集合

	//1.1、map的声明
	//var map变量名 map[keyType] valueType
	//注意map在声明时不会分配内存,需要使用make初始化

	//声明一个map
	var map1 map[string]int
	//初始化map
	map1 = make(map[string]int, 10)
	map1["guai"] = 18
	map1["shuai"] = 16
	//打印map的内容
	fmt.Println("map1中的内容:", map1, "map长度为:", len(map1))

	//遍历map1中的值
	for key, value := range map1 {
		fmt.Println("key:", key, " value:", value)
		fmt.Println("key:", key, " value:", value)
	}

	//1.2、对map内容的增删改查

	//增与改
	//当map中没有该key值时增加
	map1["cabbage"] = 120
	fmt.Println("map1中的内容:", map1)
	//当map中有该key值时修改value
	map1["cabbage"] = 18
	fmt.Println("修改key=“cabbage”中的内容:", map1)

	//根据key值查找value
	fmt.Println("key=shuai val=", map1["guai"])
	//使用内置函数delete() 根据key值删除
	delete(map1, "cabbage")
	fmt.Println("删除map1中key=“cabbage”的内容:", map1)

	//2、map切片
	//类型为map的切片为称为map切片,这样map个数就可以动态变化了
	//2.1、声明一个map切片
	var monsters []map[string]int
	monsters = make([]map[string]int, 2)

	if monsters[0] == nil {
		monsters[0] = make(map[string]int, 2)
		monsters[0]["萝卜"] = 18
		monsters[0]["白菜"] = 16
	}
	if monsters[1] == nil {
		monsters[1] = make(map[string]int, 2)
		monsters[1]["西红柿"] = 18
		monsters[1]["茄子"] = 16
	}
	//使用append追加一个key-value
	monsters = append(monsters, map[string]int{"冬瓜": 12})
	fmt.Println(monsters)

	//3、map排序
	//拱廊中没有正对map的key进行排序的方法
	//golang中的map默认使无序的,注意也不是按照添加的顺序村方法,每次遍历的结果可能不一样

	//4、map使用细节
	//4.1、map是引用类型
	//4.2、map可以自动扩容
	//4.3、map的value的类型也可以是struct类型

	//4.2、map自动扩容测试
	//定义map
	var mapExpansion map[int]int
	//初始化一个长度为1
	mapExpansion = make(map[int]int, 1)
	//实际赋了两个值
	mapExpansion[1] = 1
	mapExpansion[2] = 2
	fmt.Println("map扩容:", mapExpansion)

	//4.3、value类型为结构体
	students := make(map[string]Stu, 3)
	students["1001"] = Stu{"guai", 16}
	students["1002"] = Stu{"shuai", 18}

	for key, stu := range students {
		fmt.Println("学号:", key)
		fmt.Println("姓名:", stu.name)
		fmt.Println("年龄:", stu.age)
	}

}

//定义一个结构体(和c可太像了)
type Stu struct {
	name string
	age  int
}
发布了38 篇原创文章 · 获赞 0 · 访问量 927

猜你喜欢

转载自blog.csdn.net/weixin_44373940/article/details/104441769