zoukankan      html  css  js  c++  java
  • Map 「go

    如何声明一个Map

    m1 := map[int]int{1: 2, 2: 4, 3: 9}
    
    m2 := map[int]int{}
    
    m3 := make(map[int]int , 10)
    

    ​ 上面三种方法都可以生成一个键为int类型值为int类型的map,第一种方法可以初始化这个map,第二种只是声明了map没初始化,第三种方法看起来就有点奇怪了,传入两个参数,第一个参数是map的类型,第二个是容量,map的容量是可变的,刚声明的时候比较小,随着键值对的不断增加,就需要扩容来装载更多的元素,扩容是一个比较消耗性能的操作,所以如果我们知道我们需要的map的大小,就可以在声明的时候确定容量,减少性能的损耗。

    如何从Map中读取元素

    m1[1]
    

    接上上边的第一个声明,这样来读取key为1的元素,因为是int作为key所以直接放入int值,如果是string作为key那就在[]放入string。

    那读取不存在的数据会怎么样呢?

    println(m1[4])
    //  0
    

    得到的结果是0,那这里就有个疑问了,如果现在map m1中就有一对键值为4:0,那我该怎么判断4这个key 是有值呢还是没值呢,自然是有方法的

    if v, e := m1[4]; e {
      println(v)
    } else {
      println("no")
    }
    

    e接收到一个布尔值,表示是否有值。

    我们写java的时候经常会遇到空指针异常,取map中的一个不存在的键值对也会触发,go语言这样设计就避免了这个问题,但自我感觉半斤八两,可能是刚刚学习,没体会到其中妙用

    如何遍历Map

    for k, v := range m1 {
      println(k, v)
    }
    

    简洁明了,有编程基础的理解起来不难。

    可以存放函数的Map

    go语言的Map的value可以放入函数,看起来像下面代码这样

    m := map[int]func(v int) int{}
    m[1] = func(v int) int { return v }
    m[2] = func(v int) int { return v * v }
    println(m[1](2))
    println(m[2](2))
    

    这是其他编程语言不常见的特性。

  • 相关阅读:
    java课程设计---团体
    Java课设(学生信息管理系统)
    201521123044 《Java程序设计》第14周学习总结
    201521123044 《Java程序设计》第13周学习总结
    软件工程个人总结
    alpha阶段个人总结
    软件工程第四周 案例分析
    软件工程第三周 结对编程
    软件工程第二周阅读作业
    IPV6
  • 原文地址:https://www.cnblogs.com/ljsh/p/13944066.html
Copyright © 2011-2022 走看看