go-map

112 阅读1分钟

定义

map是key-value的数据结构,即关联数组。

声明,初始化,make

  • var mapName map[key_dataType]value_dataType

  • key数据类型:

    • int String float 指针 chan
    • 数组、切片和结构体不能作为 key
  • value类型

  • 初始化

    • 声明是不会分配内存的,初始化需要 make ,分配内存后才能赋值和使用
    • 示例1:使用make(map[type]type,len,cap)
        func shengming_1() {
            map_1 := make(map[string]string, 10)
            map_1["name"] = "王工"
            map_1["age"] = "30"
            map_1["sex"] = "男"
            fmt.Println(map_1)
        }
    
    • 示例2:不使用make
        func shengming_2() {
            map_2 := map[string]string{
                    "name": "王工",
                    "age":  "20",
            }
            map_2["sex"] = "男"
            fmt.Println(map_2)
        }
    

map的增删改查操作

  • 增加和更新: mapName["key"] = "value"
  • 删除: delete(mapName,key),若不包含这个元素,则不操作
  • 查找: if var_name, ok := map_2["name"]; ok { var_name为返回值,ok为bool值
    func get_value() {
	map_2 := map[string]string{
		"name": "王工",
		"age":  "20",
	}

	if var_name, ok := map_2["name"]; ok {
		fmt.Println(var_name)
	} else {
		fmt.Println("不存在这个元素")
	}

    }

遍历

  • map 的遍历使用 for-range 的结构遍历
  • 示例:
    func bianli() {
        map_1 := make(map[string]string, 10)
        map_1["name"] = "王工"
        map_1["age"] = "30"
        map_1["sex"] = "男"

        for k, v := range map_1 {
                fmt.Println("key:", k, "===value:", v)
        }
    }

map切片

  • 切片的数据类型是切片,则称之为map切片,map个数可以动态变化
  • var slice_map []map[string]string

排序

  • map默认是无序的,每次遍历,输出的结果是不同的
  • sort包排序

其他补充

  • Map是引用传值,函数接收一个map,修改后,会直接修改原来的map
  • map达到容量上限后,会自动扩容,不会发生painc