Map

2020-03-09  本文已影响0人  isuntong

初始化

package main

import "fmt"

//22
func main() {
    /*
    map:映射,是一种专门用于存储键值对的集合,属于引用类型

    存储特点:
        A:存储的是无序的键值对
        B:键不能重复,并且和value值一一对应
            map中的key不能重复,如果重复,那么新的value会覆盖掉原来的,不会报错

        语法结构:
            1. 创建map
                var map map[key类型]value类型
                    nil map,无法直接使用

                var map = make(map[key类型]value类型)

                var map = map[key类型]value类型{key:value,key:value...}

        int:0
        float:0.0 0
        string:""
        array:

        slice:nil
        map:nil
    */
    //创建
    var map1 map[int]string //没有初始化,nil
    var map2 = make(map[int]string)
    var map3 = map[string]int{"go":98, "python":97}
    fmt.Println(map1)
    fmt.Println(map2)
    fmt.Println(map3)

    fmt.Println(map1 == nil)
    fmt.Println(map2 == nil)
    fmt.Println(map3 == nil)

    if map1 == nil {
        map1 = make(map[int]string)
        fmt.Println(map1 == nil)
    }

}

map的使用

//存储键值对
    map1[1] = "hello"
    map1[2] = "world"
    map1[3] = "haha"
    map1[4] = "zhangsan"

    //获取数据,根据key获取键值对
    //多运行几次,结果无序
    fmt.Println(map1)

    fmt.Println(map1[4]) //key不存在得到的是类型的默认值

    //如何判断是不存在还是就是设定的默认值
    v1,ok := map1[40]
    if ok {
        fmt.Println("对应数据:",v1)
    }else {
        fmt.Println("不存在,获取为零值:",v1)
    }

    //修改数据
    fmt.Println(map1)
    map1[3] = "hehe"
    fmt.Println(map1)

    //删除数据 key不存在无影响
    delete(map1, 3)
    fmt.Println(map1)

    //长度
    fmt.Println(len(map1))

map的遍历

/*
    遍历:for range
        数组,切片:index、value
        map:key,value

    */

    for k,v := range map1 {
        fmt.Println(k,v) //无序
    }

    //如何有序?
    fmt.Println("有序")

    //但是key无序不行了
    for i := 1; i < len(map1); i++ {
        fmt.Println(i, "---->", map1[i])
    }

    /*
    获取所有key,做切片/数组
    进行排序
    遍历key
    */
    keys := make([]int, 0, len(map1))

    for k,_ := range map1 {
        keys = append(keys, k)
    }
    fmt.Println(keys)

    //排序 sort包下的排序方法
    sort.Ints(keys)
    fmt.Println(keys)

    for _,key := range keys {
        fmt.Println(key,map1[key])
    }

Map结合Slice

/*
    map结合slice
        1. 创建map用于存储人的信息

        2. 每个map存储一个人的信息

        3. 将这些map存入到slice中

        4. 打印遍历输出

    */

    //1.
    map5 := make(map[string]string)
    map5["name"] = "王二狗"
    map5["age"] = "18"
    map5["sex"] = "男"
    map5["address"] = "召唤师峡谷"
    fmt.Println(map5)

    //第二个人只能再创建map
    map6 := make(map[string]string)
    map6["name"] = "小花"
    map6["age"] = "18"
    map6["sex"] = "女"
    map6["address"] = "召唤师峡谷"
    fmt.Println(map6)

    //第三个人
    map7 := map[string]string{"name":"st","age":"22","sex":"男","address":"长春"}
    fmt.Println(map7)

    //2.
    s1 := make([]map[string]string, 0, 3)
    s1 = append(s1, map5)
    s1 = append(s1, map6)
    s1 = append(s1, map7)

    //遍历
    for i,val := range s1 {
        fmt.Printf("第%d个人的信息是:\n",i)
        fmt.Printf("\t姓名:%s\n", val["name"])
        fmt.Printf("\t年龄:%s\n", val["age"])
        fmt.Printf("\t性别:%s\n", val["sex"])
        fmt.Printf("\t地址:%s\n", val["address"])
    }

map是引用类型数据

/*
    map是引用类型
    */

    map10 := make(map[int]string)
    map11 := make(map[string]float64)
    fmt.Printf("%T\n", map10) //map[int]string
    fmt.Printf("%T\n", map11) //map[string]float64

    map13 := make(map[string]map[string]string)
    m1 := make(map[string]string)
    m1["name"] = "王二狗"

    m2 := make(map[string]string)
    m2["name"] = "张三"

    map13["hr"] = m1
    map13["开发"] = m2
    fmt.Printf("%T\n", map13)
    fmt.Println(map13) //map[hr:map[name:王二狗] 开发:map[name:张三]]

    fmt.Println("-----------")
    map14 := make(map[string]string)
    map14["st"] = "好看"
    fmt.Println(map14)

    map15 := map14
    fmt.Println(map15)

    map14["st"] = "不好看"
    fmt.Println(map14)
    fmt.Println(map15)
上一篇下一篇

猜你喜欢

热点阅读