zoukankan      html  css  js  c++  java
  • go基本数据类型--map

    一.创建map类型的三种方式

    package main
    
    import "fmt"
    
    func main() {
    
    	// 1、make创建map类型的数据
    
    	// var userinfo = make(map[string]string)
    
    	// userinfo["username"] = "张三"
    	// userinfo["age"] = "20"
    	// userinfo["sex"] = "男"
    	// // fmt.Println(userinfo)
    	// fmt.Println(userinfo["username"])
    
    	//2、map 也支持在声明的时候填充元素
    	// var userinfo = map[string]string{
    	// 	"username": "张三",
    	// 	"age":      "20",
    	// 	"sex":      "男",
    	// }
    	// fmt.Println(userinfo)
    
    	// 3、第三种创建map类型数据的方法
    
    	userinfo := map[string]string{
    		"username": "张三",
    		"age":      "20",
    		"sex":      "男",
    	}
    	fmt.Println(userinfo)
    }
    

     二、map 数据遍历

      

    package main
    
    import "fmt"
    
    func main() {
    
    	// var userinfo = map[string]string{
    	// 	"username": "张三",
    	// 	"age":      "20",
    	// 	"sex":      "男",
    	// }
    
    	// fmt.Println(userinfo["username"]) //张三
    
    	//for range循环遍历map类型的数据
    	var userinfo = map[string]string{
    		"username": "张三",
    		"age":      "20",
    		"sex":      "男",
    	}
    
    	for k, v := range userinfo {
    		fmt.Printf("key:%v value:%v
    ", k, v)
    	}
    
    }
    

      三、map数据类型 curd

      

    package main
    
    import "fmt"
    
    func main() {
    
    	//map类型数据的curd
    
    	//1、创建 修改map类型的数据
    	// var userinfo = make(map[string]string)
    	// userinfo["username"] = "张三"
    	// userinfo["age"] = "20"
    	// fmt.Println(userinfo)
    
    	//2、创建 修改map类型的数据
    
    	// var userinfo = map[string]string{
    	// 	"username": "张三",
    	// 	"age":      "20",
    	// }
    
    	// userinfo["username"] = "李四"
    	// fmt.Println(userinfo)
    
    	//3、获取 查找map类型的数据
    
    	// var userinfo = map[string]string{
    	// 	"username": "张三",
    	// 	"age":      "20",
    	// }
    	// fmt.Println(userinfo["username"])  //获取
    
    	// v, ok := userinfo["age"]
    	// fmt.Println(v, ok)  //20 true
    
    	// v, ok := userinfo["xxxxx"]
    	// fmt.Println(v, ok) // 空 和 false
    
    	//4、删除map数据里面的key以及对于的值
    
    	var userinfo = map[string]string{
    		"username": "张三",
    		"age":      "20",
    		"sex":      "男",
    		"height":   "180cm",
    	}
    	fmt.Println(userinfo)
    
    	delete(userinfo, "sex")
    	fmt.Println(userinfo)
    
    }
    

      四、切片里放map,相当于php 的二维关联数组

    package main
    
    import "fmt"
    
    func main() {
    	//我们想在切片里面放一系列用户的信息,这时候我们就可以定义一个元素为map类型的切片
    
    	// var userinfo = []string{"张三", "李四"}
    
    	var userinfo = make([]map[string]string, 2, 2)
    	
    	// fmt.Println(userinfo[0]) //map[]   map不初始化的默认值nil
    
    	// fmt.Println(userinfo[0] == nil) //true
    
    	if userinfo[0] == nil {
    		userinfo[0] = make(map[string]string)
    		userinfo[0]["username"] = "张三"
    		userinfo[0]["age"] = "20"
    		userinfo[0]["height"] = "180cm"
    	}
    
    	if userinfo[1] == nil {
    		userinfo[1] = make(map[string]string)
    		userinfo[1]["username"] = "李四"
    		userinfo[1]["age"] = "22"
    		userinfo[1]["height"] = "170cm"
    	}
    
    	fmt.Println(userinfo)
    
    }
    

      五、切片的关联数组遍历输出

    package main
    
    import "fmt"
    
    func main() {
    	//如果我们想在切片里面放一系列用户的信息的时候我们就可以定义一个map类型的切片
    
    	var userinfo = make([]map[string]string, 3, 3)
    	// fmt.Println(userinfo[0] == nil)
    	if userinfo[0] == nil {
    		userinfo[0] = make(map[string]string)
    		userinfo[0]["username"] = "张三"
    		userinfo[0]["age"] = "20"
    	}
    
    	if userinfo[1] == nil {
    		userinfo[1] = make(map[string]string)
    		userinfo[1]["username"] = "李四"
    		userinfo[1]["age"] = "22"
    	}
    	if userinfo[2] == nil {
    		userinfo[2] = make(map[string]string)
    		userinfo[2]["username"] = "王五"
    		userinfo[2]["age"] = "22"
    	}
    
    	for _, v := range userinfo {
    		// fmt.Println(v)
    		for key, value := range v {
    			fmt.Printf("key:%v--value:%v
    ", key, value)
    		}
    	}
    
    }
    

      六、map对象中放切片,相当于关联数组里面放索引数组

    package main
    
    import "fmt"
    
    func main() {
    	//如果我们想在map对象中存放一系列的属性的时候,我们就可以把map类型的值定义成切片
    
    	// var userinfo = make(map[string]string)
    	// userinfo["username"] = "张三"
    	// userinfo["hobby"] = "睡觉"
    
    	var userinfo = make(map[string][]string)
    
    	userinfo["hobby"] = []string{
    		"吃饭",
    		"睡觉",
    		"敲代码",
    	}
    
    	userinfo["work"] = []string{
    		"php",
    		"golang",
    		"前端",
    	}
    
    	 fmt.Println(userinfo)
    
    	for _, v := range userinfo {
    		// fmt.Println(k, v)
    		for _, value := range v {
    			fmt.Println(value)
    		}
    	}
    }
    

      七、map类型也是引用数据类型

    package main
    
    import "fmt"
    
    func main() {
    	/*
    		值类型 :改变变量副本值的时候,不会改变变量本身的值  (基本数据类型、数组)
    		引用类型:改变变量副本值的时候,会改变变量本身的值 (切片、map)
    	*/
    
    	//map类型也是引用数据类型
    
    	var userinfo1 = make(map[string]string)
    	userinfo1["username"] = "张三"
    	userinfo1["age"] = "20"
    	userinfo2 := userinfo1
    
    	userinfo2["username"] = "李四"
    	fmt.Println(userinfo1) //map[age:20 username:李四]
    
    	fmt.Println(userinfo2) //map[age:20 username:李四]
    
    
    }
    

      八、map排序

    package main
    
    import (
        "fmt"
        "sort"
    )
    
    func main() {
        //map的排序
        map1 := make(map[int]int, 10)
        map1[10] = 100
        map1[1] = 13
        map1[4] = 56
        map1[8] = 90
        map1[11] = 100
        map1[2] = 13
    
        // fmt.Println(map1)
    
        /*
            1 13
            4 56
            10 100
            8 90
        */
        // for key, val := range map1 {
        //     fmt.Println(key, val)
        // }
    
        //需求:按照key升序输出map的key=>value   (签名算法)
    
        //1、把map的key放在切片里面
        var keySlice []int
        for key, _ := range map1 {
            keySlice = append(keySlice, key)
        }
        fmt.Println(keySlice) //[11 10 4 8 2 1]
    
        //2、让key进行升序排序
        sort.Ints(keySlice)
        fmt.Println(keySlice) //[1 2 4 8 10 11]
    
        //3、循环遍历key输出map的值
        for _, v := range keySlice {
            fmt.Printf("key=%v value=%v
    ", v, map1[v])
        }
    
    }

    九.map 程序

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        // 写一个程序,统计一个字符串中每个单词出现的次数。比如:”how do you do”中how=1 do=2 you=1。
    
        // this is golang
    
        var str = "how do you do"
        var strSlice = strings.Split(str, " ")
        fmt.Println(strSlice)
    
        var strMap = make(map[string]int)
        for _, v := range strSlice {
            strMap[v]++
        }
        fmt.Println(strMap)
    
    }

     

  • 相关阅读:
    关于格林尼治时间(GMT)和DateTime相互转换的分享
    Mybatis多表操作
    Mybatis动态SQL
    Mybatis连接池及事务
    Mybatis基本使用
    Mybatis基本入门搭建
    面试刷题29:mysql事务隔离实现原理?
    面试刷题28:如何写出安全的java代码?
    面试刷题27:程序员如何防护java界的新冠肺炎?
    面试刷题26:新冠攻击人类?什么攻击java平台?
  • 原文地址:https://www.cnblogs.com/zxqblogrecord/p/13743919.html
Copyright © 2011-2022 走看看