美文网首页
11-Go语言字典

11-Go语言字典

作者: 喝酸奶要舔盖__ | 来源:发表于2018-09-26 15:42 被阅读0次

    字典

    字典基本概念
    • 和数组以及切片一样, 字典是用来保存一组相同类型的数据的,数组和切片可以通过索引获得对应元素的值字典可以通过key获得对应元素的值
    • 数组和切片的索引是从0开始自动递增
      字典的key是需要我们手动设置

    字典定义的格式
    • var 字典名称 map[key的数据类型]value的数据类型

    字典的初始化
    • 语法糖来初始化
       //1.创建字典的第一种方式
        //定义一个字典
        var dict map[int]int
        //给字典初始化
        dict = map[int]int{0:1,1:3,2:5}
        fmt.Println(dict)
        fmt.Println(len(dict))
        //通过key可以修改字典
        dict[0] = 666
        fmt.Println(dict)
        //通过key来查找对应的值
        fmt.Println(dict[0])
    
        //通过语法糖初始化字典
        dict := map[string]string{"name" : "lnj", "age" : "18"}
        fmt.Println(dict)
        fmt.Println(len(dict))
    
    • make(字典数据类型,长度)初始化
      指定字典的长度
       //2.创建字典的第二种方式
        var dict map[int]int
        //通过make函数初始化,指定字典的长度
        //在企业开发中,如果事先知道字典中需要保存多少条数据, 那么建议指定字典的长度
        dict = make(map[int]int,3)
        fmt.Println(dict)
        fmt.Println(len(dict))
        dict[0] = 1
        dict[1] = 3
        dict[2] = 5
        dict[3] = 6
        fmt.Println(dict)
        fmt.Println(len(dict))
    
    • make(字典数据类型)初始化
      不指定字典的长度
    //3.创建字典的第三种方式
        //通过make函数初始化字典,不指定字典长度
        dict := make(map[int]int)
        fmt.Println(dict)
        dict[0] = 1
        dict[1] = 3
        dict[2] = 5
        dict[3] = 7
        fmt.Println(dict)
    

    字典的遍历
    • 使用for..range遍历字典
    for key, value := range dict {
        fmt.Println("key = ",key, "value = ", value)
    }
    

    字典的操作
    • 增加操作
      • 字典名称[key] = value , 如果字典中没有对应的key,则代表增加该key和value
    • 修改操作
      • 字典名称[key] = value,如果字典中有对应的key,则代表修改key对应的值
    • 查询操作
      • value ok := 字典名称[key]
    • 删除操作
      • delete(字典变量, key),会将指定字典中指定key的值删除
    package main
    
    import "fmt"
    
    func main() {
        /*
        注意点:
        字典中不能有同名的key
        */
    
        var dict map[string]string
        //初始化字典
        dict = make(map[string]string, 2)
    
    
        //字典增加数据
        dict["name"] = "lnj"//没有key代表增加
        dict["age"] = "18"
        //字典修改数据
        dict["name"] = "zs" //有key代表修改值
        fmt.Println(dict) //map[age:18 name:zs]
    
        //字典查询数据
        value, ok := dict["name"]
        fmt.Println(ok) //true
        fmt.Println(value)
    
        value, ok := dict["gender"]
        fmt.Println(ok) //false
        fmt.Println(value)
    
        //企业开发中标准写法
        if value, ok := dict["age"]; ok {
            fmt.Println(ok)
            fmt.Println(value)
        }
        //删除操作
        dict := map[string]string{"name" : "wjh","age": "18"}
        delete(dict,"age")//删除key和对应的value
        fmt.Println(dict)
    }
    
    

    字典地址传递
    • 字典之间的赋值和切片之间的赋值一样, 是地址传递所以字典作为函数的参数, 修改形参会影响到实参
    • 注意点:字典和数组以及切片不一样, 数组和切片保存的数据是有序的, 而字典保存的数据是无序的
    package main
    
    import "fmt"
    
    func main() {
        //字典是地址传递
        dict1 := map[string]string{"name":"lnj","age":"18"}
        var dict2 map[string]string
        dict2 = dict1
        fmt.Println(dict1) //修改前map[name:lnj age:18]
        dict2["name"] = "wjh"
        fmt.Println(dict1) //修改后map[name:wjh age:18]
    
        //作为函数参数时候
        change(dict1)
        fmt.Println(dict1) //map[name:zs age:18]
    }
    
    func change(dict map[string]string)  {
        dict["name"] = "zs"
    }
    

    相关文章

      网友评论

          本文标题:11-Go语言字典

          本文链接:https://www.haomeiwen.com/subject/pladoftx.html