go 语言map 操作

————————————————Go语言Map————————————————————
一、map
    1.map是key-value数据结构,称为字段或关联数组
    var 变量名 map[keytype]valuetype
    key的数据类型:
        bool、数字、string、指针、channel
        通常:int、string
    value的数据类型:
         bool、数字、string、指针、channel、map
        通常:int float string struct map
    var a map[string]string
    var a map[string]int
    var a map[int]string
    var a map[string]map[int]string
    map声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用



// Go语言Map package utils import ( "fmt" "sort" ) var layout string = "2006-01-02" // 全局变量 var Author string = "Jhou Shuai" // 全局变量 var Description string = "Go语言Map" //全局变量:使用反引号来定义多行字符串 var Content string = ` ` type Stu struct { Name string Age int Address string } /** * [Init 入口] * @author Jhou Shuai * @datetime 2019-05-18T11:58:33+0800 */ func Entry() { userApplication() } /** * [mapInit map基本介绍] * @author Jhou Shuai * @datetime 2019-06-01T11:11:03+0800 */ func mapInit() { // 1.使用map前,先make,make的作用是给map分配数据空间 // 2.Key不能重复,若重复咯。则以最后的一个为准 // 3.value可以重复 // 4.key-value无序的 var student map[int]map[string]string student = make(map[int]map[string]string, 2) var info map[string]string info = make(map[string]string, 10) info["name"] = "周帅" info["age"] = "18" info["age"] = "22" student[0] = info fmt.Println(student) } /** * [mapUseMethod map的使用方式] * @author Jhou Shuai * @datetime 2019-06-01T11:10:46+0800 */ func mapUseMethod() { // 1.第一种使用方式: var school map[int]map[string]string school = make(map[int]map[string]string, 2) // 2.第二种使用方式: teacher := make(map[string]string) teacher["No01"] = "张导" teacher["No02"] = "李师师" // 3.第三种使用方式: // var student map[string]string = map[string]string{"No001":"Faker","No002":"Uzi"} // var student = map[string]string{"No001":"Faker","No002":"Uzi"} // student := map[string]string{"No001":"Faker","No002":"Uzi"} student := make(map[string]map[string]string) student["No001"] = make(map[string]string, 3) student["No001"]["name"] = "Faker" student["No001"]["sex"] = "男" student["No001"]["address"] = "玉林北巷988号" student["No002"] = make(map[string]string, 3) student["No002"]["name"] = "Uzi" student["No002"]["sex"] = "男" student["No002"]["address"] = "春熙路998号" school[0] = teacher // map[0:map[No01:张导 No02:李师师]] fmt.Println(school) // map[No001:map[address:玉林北巷988号 name:Faker sex:男] No002:map[address:春熙路998号 name:Uzi sex:男]] // map[address:春熙路998号 name:Uzi sex:男] fmt.Println(student["No002"]) } /** * [curdMap map的增删改查] * @author Jhou Shuai * @datetime 2019-06-01T11:10:33+0800 */ func curdMap() { var cities = make(map[string]string) // 增加 cities["No01"] = "上海" cities["No02"] = "北京" cities["No03"] = "成都" cities["No04"] = "重庆" fmt.Println(cities) // 修改 cities["No03"] = "天府之国" // 删除 // delete 内置函数 // 删除所有,遍历逐一删除 // 直接make 一个新的空间 一次性清空 // cities = make(map[string]string) 一次性清空 delete(cities, "No04") delete(cities, "No05") fmt.Println(cities) // 查找 val, ok := cities["No05"] if ok { fmt.Println(val) } else { fmt.Println("key值不存在!") } } /** * [mapForRange map遍历 for-range] * @author Jhou Shuai * @datetime 2019-06-01T11:13:16+0800 */ func mapForRange() { var cities = make(map[string]string) cities["No01"] = "上海" cities["No02"] = "北京" cities["No03"] = "成都" cities["No04"] = "重庆" for key, val := range cities { fmt.Printf("编号:%v,城市名:%v \n", key, val) } fmt.Println("----------华丽的分割线-----------") student := make(map[string]map[string]string) student["No001"] = make(map[string]string, 3) student["No001"]["name"] = "Faker" student["No001"]["sex"] = "男" student["No001"]["address"] = "玉林北巷988号" student["No002"] = make(map[string]string, 3) student["No002"]["name"] = "Uzi" student["No002"]["sex"] = "男" student["No002"]["address"] = "春熙路998号" kyName := make(map[string]string, 3) kyName["name"] = "姓名" kyName["sex"] = "性别" kyName["address"] = "地址" fmt.Println("总共有:",len(student),"个学生!信息如下:") for key, items := range student { fmt.Printf("学生编号:%v \t", key) for ky, val := range items { alias, _ := kyName[ky] fmt.Printf("%v:%v \t", alias, val) } fmt.Println() } } /** * [mapSlice map切片] * @author Jhou Shuai * @datetime 2019-06-01T12:24:43+0800 */ func mapSlice() { // var monster []map[string]string = make([]map[string]string,2) monster := make([]map[string]string,2) if monster[0] == nil { monster[0] = make(map[string]string,2) monster[0]["name"] = "饕餮" monster[0]["power"] = "10000" } if monster[1] == nil { monster[1] = make(map[string]string,2) monster[1]["name"] = "地狱犬" monster[1]["power"] = "20000" } // panic: runtime error: index out of range // 越界咯 // if monster[2] == nil { // monster[2] = make(map[string]string,2) // monster[2]["name"] = "凤凰" // monster[2]["power"] = "30000" // } // 通过切片的append函数,可以动态的增加 newMonster := map[string]string{ "name":"青龙", "power":"100000", } monster = append(monster,newMonster) fmt.Println(monster) } /** * [mapSorted map排序] * @author Jhou Shuai * @datetime 2019-06-01T13:01:15+0800 */ func mapSorted() { // 1.现将map的key放入到切片中 // 2.对切片进行排序 sort.Ints() // 3.遍历切片,然后按照key来输出map的值 var intMap map[int]int = make(map[int]int,5) intMap[1] = 30 intMap[0] = 300 intMap[3] = 20 intMap[4] = 50 intMap[2] = 80 var keys []int for key,_ := range intMap { keys = append(keys,key) } sort.Ints(keys) for _,val :=range keys { fmt.Printf("intMap[%v]=%v \n",val,intMap[val]) } } func modify(mapArg map[int]int) { mapArg[10] = 300 } /** * [mapUsedDetail 使用细节] * @author Jhou Shuai * @datetime 2019-06-01T13:10:17+0800 */ func mapUsedDetail() { // 1.map是引用类型:遵守引用类型传递的机制,在一个函数接收map, // 修改后,会直接修改原来的map // 2.map动态扩容,自动扩容,动态的增加key-value。切片slice只能通过append // 3.map的value经常使用struct类型,更适合管理更复杂的数据 mapArg := make(map[int]int,2) mapArg[1] = 30 mapArg[2] = 20 mapArg[10] = 100 fmt.Println(mapArg) modify(mapArg) fmt.Println(mapArg) var students map[string]Stu = make(map[string]Stu,2) stu01 := Stu{"Faker",19,"玉林北巷988号"} stu02 := Stu{"Uzi",18,"春熙路998号"} students["No001"] = stu01 students["No002"] = stu02 // 遍历 fmt.Println("总共有:",len(students),"个学生!信息如下:") for key, items := range students { fmt.Printf("学生编号:%v\t 姓名:%v\t 年龄:%v\t 地址:%v\t \n", key,items.Name,items.Age,items.Address) } } func userApplication() { users := make(map[string]map[string]string,10) users["Uzi"] = make(map[string]string,2) users["Uzi"]["nickname"] = "狂小狗" users["Uzi"]["pwd"] = "123456" modifyUser(users,"Faker","蜗壳") modifyUser(users,"Uzi","洗澡啦") fmt.Println(users) } func modifyUser(users map[string]map[string]string, name string,nickname string) { // 判断users中是否有name // val,ok := users[name] if users[name] != nil { users[name]["pwd"] = "888888" users[name]["nickname"] = nickname }else{ users[name] = make(map[string]string,2) users[name]["nickname"] = nickname users[name]["pwd"] = "123456" } }

 

猜你喜欢

转载自www.cnblogs.com/fengchuiyizh/p/12297737.html