zoukankan      html  css  js  c++  java
  • 08-Maps

    Maps

    map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。Maps类似于python中的字典

    Maps定义

    maps的key值必须是可hash(就是不可变类型:字符串,数字...)(Map是无序的)

    maps创建语句: var a map[键值类型]value值类型
    
    package main
    import "fmt"
    
    func main() {
        var a map[int]string    #key是int,value是string
        fmt.Println(a)
    }
    #结果
    map[]   #map的空值是nil类型

    maps的初始化赋值和取值

    package main
    import "fmt"
    
    func main() {
        var b map[int]int=make(map[int]int)  #使用map初始化
        b[1]=100    #往b里面设置值,key value形式
        b[2]=50
        fmt.Println(b)
        fmt.Println(b[1])  #获取key为1的value值
    }
    #结果
    map[1:100 2:50]
    100

    取一个不存在的key值会怎么样?(会返回value值的空值)

    package main
    import "fmt"
    
    func main() {
        var b map[int]int=make(map[int]int)
        b[1]=100
        b[2]=50
        fmt.Println(b[5])  #去key值为5的value,取不到。因为value是int类型所以打印0
    }
    #结果
    0

    我们想知道map中到底是不是存在这个key,可以通过判断ok。如果ok是true表示存在该key,key值对应的就是value,反之表示key不存在。

    package main
    import "fmt"
    
    func main() {
        var b map[int]int=make(map[int]int)
        b[1]=100
        b[2]=50
        fmt.Println(b)
        fmt.Println(b[1]) #100
        fmt.Println(b[5])  #0
        v,ok:=b[1]
        if ok==true {    #判断
            fmt.Println(v)  #100
        }
    }

    定义和初始化的第二种方式

    package main
    import "fmt"
    
    func main() {
        var a=map[int]string{1:"10",2:"20"}   #key,value形式初始化值
        fmt.Println(a[1])  #10
    }
    #结果
    10

    删除map中的元素

    删除 map 中 key 的语法是 [delete(map, key)]。这个函数没有返回值。

    package main
    import "fmt"
    
    func main() {    
        var a =map[int]string{1:"10",2:"100"}
        delete(a,2)  #只能删存在的key
        delete(a,3)  #没有这个key就删不了
        fmt.Println(a)
    }
    #结果
    map[1:10]

    获取map的长度

    package main
    import "fmt"
    
    func main() {
        var a =map[int]string{1:"10",2:"100"}
        fmt.Println(len(a))
    }
    #结果
    2

    Map是引用类型

    map 也是引用类型。当 map 被赋值为一个新变量的时候,它们指向同一个内部数据结构。因此,改变其中一个变量,就会影响到另一变量

    package main
    import "fmt"
    func main() {
    
        var a =map[int]string{1:"10",2:"100"}
        test2(a)
        fmt.Println(a)
    }
    func test2(a map[int]string)  {
        a[1]="20"  #修改test1中的a会影响到原本的a
        fmt.Println(a)
    }
    #结果
    map[1:20 2:100]
    map[1:20 2:100]

    Map的相等性

    map 之间不能使用 == 操作符判断,== 只能用来检查 map 是否为 nil

    判断两个 map 是否相等的方法是遍历比较两个 map 中的每个元素

    Map循环出所有元素

    方法一:用for循环的方式,这种方式不提倡

    var a =map[int]string{1:"10",0:"100",10:"999"}
    for i:=0;i<len(a);i++{
        fmt.Println(a[i])
    }

    方法二:用for 和range的方式

    
    
    var a =map[int]string{1:"10",0:"100",10:"999"}
    for k,v:=range a{
        fmt.Println(k)
        fmt.Println(v)
    }

    补充:切片删除元素

    根据索引来截取,然后放入一个新数组中

    var a =[]int{1,2,3,4,5,6}
    a=append(a[0:2],a[3:]...)
    fmt.Println(a)
  • 相关阅读:
    [LeetCode]230. 二叉搜索树中第K小的元素(BST)(中序遍历)、530. 二叉搜索树的最小绝对差(BST)(中序遍历)
    【二叉树-所有路经系列(根->叶子)】二叉树的所有路径、路径总和 II、路径总和、求根到叶子节点数字之和(DFS)
    [LeetCode]1083. 销售分析 II(Mysql,having+if)
    [LeetCode]196. 删除重复的电子邮箱(delete)
    [LeetCode]面试题62. 圆圈中最后剩下的数字(数学)
    [算法]十进制整数转八进制
    [LeetCode]534. 游戏玩法分析 III(Mysql)
    [LeetCode]Mysql小本本
    [LeetCode]Mysql系列5
    Java 冒泡排序的实现
  • 原文地址:https://www.cnblogs.com/wangcuican/p/12026158.html
Copyright © 2011-2022 走看看