• Go笔记-map


    【概念】
        1- map 是引用类型的
        2- 声明方式
            var map1 map[keytype]valuetype    
            例如:var map1 map[string]int
        3- map是可以动态自增长的
        4- 未初始化的map的值是nil
        5- 可以是任意用==或者!=操作符比较的类型,比如string,int,float。不常用的还有指针和接口类型也可以。切片和结构体不行(如果要用结构体做key,需要做变通,使用提供Key(),Hash()方法)
        6- value可以是任意值
        7- map传递给函数的代价很小,在32位机器上占4个字节,在64位机器上占用8个字节,无论实际存储了多少数据。
            备注:在map中查找比线性查找快,但是比数组和切片的索引中直接读取要慢100倍,在乎性能请使用切片或数组
        8- 不要使用new来构造map,永远使用make来构造map
            备注:若使用了new()分配了一个引用对象,你会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取得了它的地址
     
     
    【map容量】
        map的长度是动态的,它不存在固定长度和限制最大长度,但是我们也可以标明map的初始容量:make(map[int]string, cap),出于性能考虑还是应该在大容量和快速扩张的map中标明初始化容量
     
     
    【map的常用操作】
        1- 测试键值对是否存在
                备注:map[key]  有两个返回值,第一个是该map键对应的值,第二个返回值是True(该键对应有值)或False(该键对应没有值)
     1 _,ok := map[key]
     2 if _,ok := map[key];ok{
     3     // do something
     4 }
     5 package main
     6 func main(){
     7     mf := make(map[int]string,2)
     8     mf[1] = "hello"
     9     mf[2] = "world"
    10  
    11     // 测试键值是否存在
    12     if _,ok := mf[1];ok{
    13         fmt.Printtf("key %d exists")
    14     }else{
    15         fmt.Printf("key %d unexists")
    16     }
    17  
    18     // 删除键值
    19     delete(mf,1)
    20 }
        2- 删除键值对
                delete(mf, 1)
     
     
    【map的for-range输出值】
        map既不是按照key的顺序排列的,也不是按照value的值排列的,每次输出都是随机
     1 package main
     2  
     3 import "fmt"
     4  
     5 func main(){
     6     mf := map[int]string{1:"hello",2:"world"}
     7     for key := range mf{
     8         // 每次运行输出的顺序都不同
     9         fmt.Printf("%d = %s",key,mf[key])
    10     }
    11 }
     
     
    package main
    
    func main(){
        // map的值是一个函数
        mf := map[int]func() int{
            1:func()int{return 10},
            2:func()int{return 20},
        }
     
        // map的值是一个切片
        mf1 := make(map[int][]string)
        mf2 := make(map[int]*[]string)
    }
      【学习参考处:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md】
  • 相关阅读:
    20162328蔡文琛 四则运算第一周
    实验三:实验报告
    20162328蔡文琛week09
    20162328蔡文琛week08
    20162328蔡文琛week07
    实验报告二
    20162312张家铖 10.9查找课堂测试
    20162312实验一
    # 20162312 2017-2018-3 《程序设计与数据结构》第3周学习总结
    # 20162312 2017-2018-1 《程序设计与数据结构》第1周学习总结
  • 原文地址:https://www.cnblogs.com/ymkfnuiwgij/p/7895017.html
Copyright © 2020-2023  润新知