go学习 --- map集合

一、map

1、map是key-value数据结构,又称为字段或者关联数组。

二、基本语法

1、var map变量名map[keytype]valuetype

2、key的类型

golang中的map,的key可以是很多种类型,比如bool,数字,string, 指针,channel , 还可以是只包含前面几个类型的接口,结构体,数组,通常为int、string

slice,map还有function 不可以,因为这几个没法用==来判断

3、value的类型

valuetype的类型和key基本一样,通常为:数字(整数,浮点数),string,map ,struct

三、map声明

1、声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用

2、map的key是不能重复,如果重复了,则以最后这个key-value为准

3、map的value是可以相同的.

4、map的key-value 是无序

使用方式一

package main

import "fmt"

func main() {
	//声明一个map
	var testMap map[string]string
	//给map分配空间,10表示给map分配的大小
	testMap = make(map[string]string,10)
	testMap["1"] = "老王"
	testMap["2"] = testMap["1"]
	fmt.Println(testMap)
}

 使用方式二

package main

import "fmt"

func main() {
	stringMap := make(map[string]string)
	stringMap["1"] = "小王"
	stringMap["2"] = stringMap["1"]
	fmt.Println(stringMap)
}

 使用方式三

package main

import "fmt"

func main() {
	stringMap := map[string]string{"1": "张三", "2": "李四",}
	fmt.Println(stringMap)
}

 练习一

我们要存放3个学生信息,每个学生有name和sex信息

package main

import "fmt"

func main() {
	//声明一个map
	stuMap := make(map[string]map[string]string)
	//第二个map也需要make
	stringMap1 := make(map[string]string)
	stringMap2 := make(map[string]string)
	stringMap3 := make(map[string]string)
	stuMap["1"] = stringMap1
	stuMap["1"]["姓名"] = "小红"
	stuMap["1"]["性别"] = "男"

	stuMap["2"] = stringMap2
	stuMap["2"]["姓名"] = "小王"
	stuMap["2"]["性别"] = "女"

	stuMap["3"] = stringMap3
	stuMap["3"]["姓名"] = "小章"
	stuMap["3"]["性别"] = "女"
	fmt.Println(stuMap)
}

四、map的增删改查

1、增加

参考使用方式二

2、删除

package main

import "fmt"

func main() {
	stringMap := make(map[string]string)
	stringMap["1"] = "小王"
	stringMap["2"] = stringMap["1"]
	stringMap["3"] = "张三"
	//删除map的内容
	delete(stringMap,"1")
	//当删除的key不存在也不报错
	delete(stringMap,"4")
	fmt.Println(stringMap)
}

 

package main

import "fmt"

func main() {
	stringMap := make(map[string]string)
	stringMap["1"] = "小王"
	stringMap["2"] = stringMap["1"]
	stringMap["3"] = "张三"
	//删除map的内容
	delete(stringMap,"1")
	//当删除的key不存在也不报错
	delete(stringMap,"4")
	//删除所有map
	//1、遍历删除
	//for key, _ := range stringMap {
	//	delete(stringMap,key)
	//}
	//2、make一下
	stringMap = make(map[string]string)
	fmt.Println(stringMap)
}

 3、查找

package main

import "fmt"

func main() {
	stringMap := make(map[string]string)
	stringMap["1"] = "小王"
	stringMap["2"] = stringMap["1"]
	stringMap["3"] = "张三"
	key,val := stringMap["3"]
	if val  {
		fmt.Println(key)
	}else {
		fmt.Println("没有这个key")
	}
}

 五、map的遍历

package main

import "fmt"

func main() {
	stringMap := make(map[string]string)
	stringMap["1"] = "小王"
	stringMap["2"] = stringMap["1"]
	stringMap["3"] = "张三"
	for _, value := range stringMap {
		fmt.Println(value)

	}
	fmt.Println("==========================")
	//声明一个map
	stuMap := make(map[string]map[string]string)
	//第二个map也需要make
	stringMap1 := make(map[string]string)
	stringMap2 := make(map[string]string)
	stringMap3 := make(map[string]string)
	stuMap["1"] = stringMap1
	stuMap["1"]["姓名"] = "小红"
	stuMap["1"]["性别"] = "男"

	stuMap["2"] = stringMap2
	stuMap["2"]["姓名"] = "小王"
	stuMap["2"]["性别"] = "女"

	stuMap["3"] = stringMap3
	stuMap["3"]["姓名"] = "小章"
	stuMap["3"]["性别"] = "女"
	for _, value1 := range stuMap {
		for _, value2 := range value1 {
			fmt.Println(value2)
		}
	}
}

 六、map切片

import "fmt"

func main() {

	maps := make([]map[string]string,2)
	strings1 := make(map[string]string)
	strings2 := make(map[string]string)
	if maps[0] == nil {
		maps[0] = strings1
		maps[0]["姓名"] = "张三"
		maps[0]["性别"] = "男"
	}
	if maps[1] == nil {
		maps[1] = strings2
		strings2["姓名"] = "李四"
		strings2["性别"] = "女"
	}
	strings3 := make(map[string]string)
	strings3["姓名"] = "王五"
	strings3["性别"] = "未知"
	//使用append改变切片
	strings := append(maps, strings3)
	fmt.Println(strings)
}

七、map排序

package main

import (
	"fmt"
	"sort"
)

func main() {
	strings := make(map[int]string)
	strings[3] = "小王"
	strings[2] = "小李"
	//定义一个切片
	var slice []int
	//遍历map拿到key
	for key, _ := range strings {
		slice = append(slice,key)
	}
	sort.Ints(slice)
	for _, val := range slice {
		fmt.Println(strings[val])
	}
}

 八、map的注意事项

1、map是引用类型

import "fmt"

func updateMap(intMap map[int]int)  {
	intMap[1] = 4
}

func main() {
	intMap := make(map[int]int)
	intMap[1] = 1
	intMap[2] = 2
	intMap[3] = 3
	updateMap(intMap)
	fmt.Println(intMap)
}

 2、map容量会自动扩容

3、map的value也经常使用struct类型,更适合管理复杂的数据

package main

import "fmt"

//定义一个结构体
type student struct {
	Name string
    Age int
	Achievement float32
}

func main() {
	students := make(map[string]student)
	s1 := student{
		Name:"小红",
		Age:12,
		Achievement:88.5,
	}
	students["01"] = s1
	for _, value := range students {
		fmt.Println(value)
	}
}

九、练习

 

package main

import "fmt"

//定义一个函数
func modifyUser(strings map[string]map[string]string,name string )  {
		if strings[name] != nil {
			strings[name]["passWord"] = "888888"
			}else {
			userMap3 := make(map[string]string)
			strings[name] = userMap3
			userMap3["nickName"] = "蜡笔小新"
			userMap3["passWord"] = "123456"
		}
}

func main() {
	var name = "张三"
	strings := make(map[string]map[string]string)
	userMap1 := make(map[string]string)
	userMap2 := make(map[string]string)
	strings["张三"] = userMap1
	  userMap1["nickName"] = "蒙面人"
	  userMap1["passWord"] = "123456"
	strings["李四"] = userMap2
	userMap2["nickName"] = "超人"
	userMap2["passWord"] = "123456"
	//fmt.Println(strings)
	modifyUser(strings,name)
	fmt.Println(strings)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值