【go基础】map

map

  • 概念

    map是key-value数据结构,又称为字段或者关联数组,类似其他编程语言的集合

  • 声明

    var 变量名 map[keytype]valuetype

    • 在使用map之前,需要先make,make的作用就是给map分配数据空间:
    var maptest map[string]string
    maptest = make(map[string]string, 10)
    
  • key可以是什么类型(通常为int和string):

    • bool
    • 数字
    • string
    • 指针
    • channel
    • 还可以是只包含上面几种类型的接口、结构体和数组
  • 使用方式:

    • 先声明,然后make分配空间
    var maptest map[string]string
    maptest = make(map[string]string, 10)
    
    • 直接使用make声明并初始化
    maptest := make(map[string]string)
    // 虽然没有指定大小,但是使用的时候,不受大小的限制。
    
    • 直接声明赋值
    var maptest map[string]string = map[string]string {
        "key1": "value1",
        "key2": "value2",
    }
    
    • 直接类型推倒声明赋值
    maptest := map[string]string {
        "key1": "value1",
        "key2": "value2",
    }
    

  • map的增删改查操作

    • 增加和更新
    mapdemo := make(map[string]string)
    mapdemo["key1"] = "value1"   // key不存在时,增加
    mapdemo["key1"] = "value2"   // key存在时,修改
    
    • 删除

      • 删除单个
      mapdemo := make(map[string]string)
      mapdemo["key1"] = "value1"
      delete(mapdemo,"key1")  // 如果key不存在,不操作,也不报错
      
      • 删除全部
      // 没有单独的方法可以一次性删除所有的值,可以遍历+delete()方法删除所有
      // 还可以 map = make(...), make一个信道map,让原来的成为垃圾,被gc回收
      mapdemo := make(map[string]string)
      mapdemo["key1"] = "value1"   
      mapdemo["key2"] = "value2"
      mapdemo = make(map[string]string)  // 直接make一个新空间
      
    • 查找:

    mapdemo := make(map[string]string)
    mapdemo["key1"] = "value1"
    val, ok := mapdemo["key1"]  // 键存在,则将值赋给val,ok==true
    val1, ok1 := mapdemo["key2"]  // 键不存在,则ok==false,val为value的零值
    

  • map遍历:

// 使用for  range 遍历
mapdemo := make(map[string]string)
mapdemo["key1"] = "value1"   
mapdemo["key2"] = "value2"
for k,v := range mapdemo {
    ... 			//  k为key值,v为value值
}
  • map的长度
// 使用len()方法,返回key-value对的数量
mapdemo := make(map[string]string)
mapdemo["key1"] = "value1"   
mapdemo["key2"] = "value2"
fmt.Println(len(mapdemo)) // 2
  • map切片:切片的数据类型是map
var people []map[string]int
maptest := make(map[string]int)
// 使用append添加
for i := 0; i < 5; i++ {
    maptest["key"] = i + 1
    people = append(people, maptest)
}
fmt.Println(people)
  • 说明:

    • map是引用类型;
    mapdemo := make(map[string]string)
    mapdemo["key1"] = "value1"   
    mapdemo["key2"] = "value2"
    mapdemo1 := mapdemo
    mapdemo1["key1"] = "value111"
    // 此时 mapdemo和maodemo1都是map["key1":"value111","key2":"value2"]
    
    • map的key-value对的数量可以动态增加

    • map的值也可以是结构体,来管理更复杂的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值