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)

}

 

原文地址:https://www.cnblogs.com/zxqblogrecord/p/13743919.html