• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

go:map

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1. 简介

  map 类似于Java中的 map,是一种存储键值对的数据结构。

  map 属于引用类型;

  声明方式:var  map1 map [keyType] valueType,

  示例:

    // 声明及初始化
    var map1 = make(map[int]int)
    map1[1] = 12
// 声明 map var map2 map[string] int // 初始化 map map2 = make(map[string]int) map2["1"] = 123 fmt.Println(map1)

  未初始化的map值为 nil,声明时不需要指定map的容量,map是可以动态增长,当 map 增长到容量上限时,map 的大小自动增加,最好在初始化时设置其容量的大小;

keyType:

  1. 任意可以用 == 或者 != 操作符比较的类型;

  2. 只包含内建类型的 struct ;

  3. 指针和接口类型;

  4. 提供 Ke() 和 Hash() 方法的结构体,这样可以通过结构体的域计算出唯一的数字或者字符串的 key;

  5. 数组、切片和含有数组和切片的结构体不能作为 key;

valueType:

  1. 任意类型,可以通过空接口类型存储任意值;

  2. 函数类型,通过key选择要执行的函数

2. 基本操作

2.1 添加元素

  map1[key] = value

    var a3 =  make(map[int]int,5)
    a3[1]=1

2.2 获取元素

  value = map1[key]

    var a3 =  make(map[int]int,5)
    a3[1]=1
    valuea31 := a3[1]

2.3 判断 key 是否存在

  value1,isExist = map1[key1],value1 key1对应的值,isExist,bool值,表示是否存在这个 key1

    // 验证  val1, isPresent = map1[key1] 形式判断 val1 到底是空值,还是不存在这个 key1
    var a5 =  make(map[int]int)
    a5[1] = 0
    value3,isExist3 := a5[1]
    fmt.Printf("a5[1] value=%v,isExist=%t \n",value3,isExist3)
    value4,isExist4 := a5[2]
    fmt.Printf("a5[2] value=%v,isExist=%t \n",value4,isExist4)

    // 简写形式,判断 key 是否存在,并操作 value
    if value6,isExist6 := a5[1];isExist6{
        fmt.Printf("value6 exist:%v, value:%v",isExist6,value6)
    }
    // 只判断 key 是否存在
    if _,isExist6 := a5[1];isExist6{
        fmt.Printf("value6 exist:%v",isExist6)
    }

2.4 删除元素

  delete(map1,key1)

    var a5 =  make(map[int]int)
    a5[1] = 0
    // 删除元素,不存在也不报错
    delete(a5,1)
    delete(a5,123)

2.5 for-range

    var map1 = make(map[int]int)
    map1[1] = 12
    map1[2] = 13
    map1[12] = 2
    for key, value := range map1 {
        fmt.Printf("map1 key=%v,value=%v \n",key,value)
    }

2.6 排序

  先将 key 存放到 slice ,再对 slice 进行排序, 然后按照 排序的 slice 输出 map

    // map1 初始化
    var map1 = make(map[int]int)
    map1[1] = 12
    map1[2] = 13
    map1[12] = 2
    // 存储 map1 的 key
    var slice = make([]int,3)
    i:= 0
    for key := range map1 {
        slice[i]=key
        i++
    }
    // 对 key  进行排序
    sort.Ints(slice)
    // 输出排序后的 map1
    for _, value := range slice {
        fmt.Println(value,"=",map1[value])
    }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
gogrpc流式和非流式的例子发布时间:2022-07-10
下一篇:
Go语言圣经发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap