go:map

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 
",value3,isExist3)
    value4,isExist4 := a5[2]
    fmt.Printf("a5[2] value=%v,isExist=%t 
",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 
",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])
    }
原文地址:https://www.cnblogs.com/virgosnail/p/12955814.html