GO基础之Map

go开发手册:   https://studygolang.com/pkgdocgolang

 1、什么是map

有资料翻译成地图、映射或字典。可是大多数习惯上翻译成集合。
一、map是Go中的内置类型,它将一个值与一个键关联起来。可使用相应的键检索值。数组

  • map是一种无序的键值对(key-value pair)的集合。map经过key来快速检索数据,key相似于索引,指向相应的value值。
  • map是一种集合,因此能够像遍历数组或切片那样去遍历它,不过map是无序的,因此没法决

 

二、使用map的注意细节:
• map是无序的,每次打印出来的map都会不同,它不能经过index获取,而必须经过key获取;
• map的长度是不固定的,和slice-样能够扩展。内置的len()函数一样适用于map,返回map拥有的键值对的数量。可是map不能经过cap()函数计算容量(或者说cap()函数的参数不能够是map);
•同_tmap中key必须保证惟_。key的数据类型必须是可参与比较运算的类型,也就是支持==或!=操做的类型。如布尔型、整数型、浮点型、字符串型、数组。对于切片、函数等引用类型则不能做为键的类型;函数

(Invalid map key type: must not be must not be a function , map or slice)
• map的value能够是任何数据类型。
•和slice—样,map也是一种引用类型;spa

 

2、map的使用

一、map的声明翻译

map中key能够是:int、float、bool、string、数组;    必定不能够是:切片、函数、mapcode

package main

import (
    "fmt"
)

func main() {
    //map的声明 一(var 变量名 map[key的类型]value的类型 )
    var map1 map[string]string
    fmt.Printf("%T,%v,%v \n", map1, map1, map1 == nil) //map[string]string,map[],true
    //map声明 二
    map2 := make(map[string]string)
    fmt.Printf("%T,%v,%v \n", map2, map2, map2 == nil) //map[string]string,map[],false
}

二、map的初始化blog

package main

import (
    "fmt"
)

func main() {
    //map的声明 一(var 变量名 map[key的类型]value的类型 )
    var map1 map[string]string
    fmt.Println("map的长度", len(map1))
    //在声明的同时初始化数据
    var map2 = map[string]string{
        "sz": "张三",
        "ls": "李四",
    }
    fmt.Println("map=", map2)
    
    //先声明 而后再赋值
    map3 := make(map[string]string)
    map3["ww"] = "王五"
    map3["lb"] = "刘备"
    fmt.Println("map=", map3)
}

三、map的CURD索引

package main

import (
    "fmt"
)

func main() {
    //=========在声明的同时初始化数据
    var map2 = map[string]string{
        "zs": "张三",
        "ls": "李四",
    }
    //=========map添加数据
    map2["lb"] = "刘备"

    //=========map的遍历
    for k, v := range map2 {
        fmt.Println("k=", k, " v=", v)
    }
    //=========根据key检测值是否存在
    v, ok := map2["sz"]
    fmt.Println("v=", v, " ok=", ok) //v= 张三  ok= true
    v1, ok1 := map2["sssss"]
    fmt.Println("v=", v1, " ok=", ok1) //v=   ok= false
    if value, key := map2["lb"]; key {
        fmt.Println("元素的值=", value)
    }
    //=========修改map中key对应的value
    map2["zs"] = "zhangshan"
    fmt.Println("update=", map2)

    //=========delete 删除map中的元素
    //该函数没有返回值,若是删除不存在的key程序不会报错
    fmt.Println("delete befor=", map2)
    delete(map2, "lb")
    delete(map2, "HHHHHHHHHHHHHH")
    fmt.Println("delete after=", map2)
    //=========清空map (go语言没有清空的函数,若是要清空,就是直接赋新的map)
    map2 = map[string]string{}
    //map2 = make(map[string]string)
    fmt.Println("clear=", map2)

    //map是引用类型
    
}

四、map是引用类型开发

package main

import (
    "fmt"
    "container/list"
)

func main() {
    //初始薪资
    salary := map[string]float64 {
        "Steven":15000,
        "Josh":20000,
        "Daniel":5000,
    }
    fmt.Println("初始薪资",salary)

    //调薪后
    newSalary := salary
    newSalary["Daniel"] = 8000
    fmt.Println("调薪后:" , newSalary)
    fmt.Println("原始薪资salary是否受影响:" , salary)

    //按期涨薪
    changeSalary(salary)
    fmt.Println("原始薪资salary是否受影响:" , salary)
}

//按期涨薪
func changeSalary(m map[string]float64) {
    for k :=range m {
        m[k] *= 1.1
    }
}
相关文章
相关标签/搜索