• Go:map


    一、map的创建方式

    func main() {
    	// map创建方式1
    	// 声明后再make
    	var stu1 map[int]string
    	stu1 = make(map[int]string, 2)
    	fmt.Println(stu1) // map[]
    	stu1[1] = "哈哈"
    	fmt.Println(stu1) // map[1:哈哈]
    
    	// map创建方式2
    	// 声明时就make
    	var stu2 = make(map[int]string, 2)
    	fmt.Println(stu2) // map[]
    	stu3 := make(map[int]string, 2)
    	fmt.Println(stu3) // map[]
    
    	// map创建方式3
    	// 声明时直接赋值,不需要make
    	var stu4 = map[int]string{1: "路飞", 2: "佩奇"}
    	fmt.Println(stu4) // map[1:路飞 2:佩奇]
    
    	stu5 := map[int]string{1: "妖姬", 2: "瞎子"}
    	fmt.Println(stu5) // map[1:妖姬 2:瞎子]
    }
    

    二、map的增删改查

    func main() {
    	// 增加与修改
    	stu := make(map[int]string, 2)
    	stu[1] = "哈哈"
    	stu[2] = "嘻嘻"
    	stu[1] = "呵呵"
    	fmt.Println(stu) // map[1:呵呵 2:嘻嘻]
    	// 删除
    	delete(stu, 1)
    	fmt.Println(stu) // map[2:嘻嘻]
    	// 如果要删除map的所有key,可以遍历逐个删除,也可以make一个新的map,让原来的成为垃圾,被gc回收
    	stu = make(map[int]string)
    	fmt.Println(stu) // map[]
    	// 查找
    	s := map[int]string{1: "哈哈", 2: "嘻嘻", 3: "呵呵"}
    	val, ok := s[1]
    	if ok {
    		fmt.Println(val) // 哈哈
    	} else {
    		fmt.Println("不存在此key")
    	}
    }
    

    三、map的遍历

    func main() {
    	// map遍历
    	s := map[int]string{1: "哈哈", 2: "嘻嘻", 3: "呵呵"}
    	for k, v := range s {
    		fmt.Printf("k=%d v=%s
    ", k, v)
    	}
    	// k=1 v=哈哈
    	// k=2 v=嘻嘻
    	// k=3 v=呵呵
    
    	// 遍历复杂一点的map
    	stu := make(map[int]map[string]string)
    	stu[1] = make(map[string]string, 2)
    	stu[1]["name"] = "妖姬"
    	stu[1]["gender"] = "女"
    	stu[2] = make(map[string]string, 2)
    	stu[2]["name"] = "瞎子"
    	stu[2]["gender"] = "男"
    	for k1, v1 := range stu {
    		fmt.Println(k1)
    		for k2, v2 := range v1 {
    			fmt.Printf("k2=%s v2=%s
    ", k2, v2)
    		}
    	}
    	// 1
    	// k2=name v2=妖姬
    	// k2=gender v2=女
    	// 2
    	// k2=name v2=瞎子
    	// k2=gender v2=男
    }
    

    四、map 切片

    切片的数据类型如果是map,则我们称为 slice of map,map 切片,这样map个数就可以动态变化了。

    func main() {
    	// map切片示例
    	
    	// 声明切片
    	var person []map[string]string
    	person = make([]map[string]string, 1)
    	// 增加person
    	if person[0] == nil {
    		person[0] = make(map[string]string, 2)
    		person[0]["name"] = "妖姬"
    		person[0]["age"] = "18"
    	}
    	// 因为切片大小为1,所以不能再使用上面方式增加person(越界)
    	// 所以可以使用append函数,动态地增加person
    	p := map[string]string{
    		"name": "瞎子",
    		"age": "20",
    	}
    	person = append(person, p)
    	fmt.Println(person) // [map[age:18 name:妖姬] map[age:20 name:瞎子]]
    }
    

    五、总结

    map的容量满后,再增加元素,会自动扩容,并不会panic,也就是说map能动态地增长键值对;

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

  • 相关阅读:
    oralce的function处理考勤时间节点以及计算工作时间
    如何把虚拟机上的文本或是文件复制粘贴到本地?
    Sqlserver语句对表结构的操作
    ubuntu下提示/boot空间不足,解决办法
    原码、反码和补码
    C++中四种类型转换方式
    C语言之 短路原则
    ubuntu下为opera26.0安装flash
    C++函数重载
    C++内联函数
  • 原文地址:https://www.cnblogs.com/believepd/p/10928524.html
Copyright © 2020-2023  润新知