Go map

Posted s686zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go map相关的知识,希望对你有一定的参考价值。

map是一种无序的基于 key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。

map的基本使用

map中的数据都是成对出现的,map的基本使用如下:

func main() {
       scoreMap := make(map[string]int,8)
       scoreMap["张三"] = 90
       scoreMap["小明"] = 100
       fmt.Println(scoreMap)
       fmt.Println(scoreMap["小明"])
       fmt.Println("type of a:%T
",scoreMap)
}


//输出:
//map[小明:100 张三:90]
//100
//type of a:map[string]int

 

map也支持在声明的时候填充元素,例如:

func main() {
    userInfo := map[string]string{
        "username": "沙河小王子",
        "password": "123456",
    }
    fmt.Println(userInfo) //
}

 

 

判断某个键是否存在

Go中有个判断map中键是否存在的特殊写法,格式如下:

value , ok := map[key]

 

例:

func main() {
     scoreMap := make(map[string]int)
     scoreMap["张三"] = 90
     scoreMap["小明"] = 100
     // 如果 key存在 ok为 true, v为对应的值;不存在 ok为false,v为值类型的零值
     v , ok := scoreMap["张三"]
     if ok {
         fmt.Println(v)
    }else {
         fmt.Println("查无此人")
    }
}

 

 

map的遍历

Go中使用for range 遍历 map

func main() {
      scoreMap := make(map[string int])
      scoreMap["张三"] = 90
      scoreMap["小明"] = 100
      scoreMap["娜扎"] = 60
      for k , v := range scoreMap {
           fmt.Println(k,v)
     }
}

 

 

但我们只想遍历 key 的时候,可以按下面的写法:

func main() {
    scoreMap := make(map[string]int)
    scoreMap["张三"] = 90
    scoreMap["小明"] = 100
    scoreMap["娜扎"] = 60
    for k := range scoreMap {
        fmt.Println(k)
    }
}

 

注意:遍历map时的元素顺序与添加键值对的顺序无关。

 

使用 delete()函数删除键值对

使用 delete() 内建函数从map中删除一组键值对, delete()函数的格式如下:

delete(map,key)

 

示例:

func main() {
      scoreMap := make(map[string]int)
      scoreMap["张三"] = 90
      scoreMap["小明"] = 100
      scoreMap["娜扎"] = 60
      delete(scoreMap,"小明")   //将小明:100从map中删除
      for k,v := range scoreMap{
          fmt.Println(k, v)        
      }
}

 

按照指定顺序遍历map

func main() {
      rand.Seed(time.Now().UnixNano()) //初始化随机数种子
      
      var scoreMap = make(map[string]int, 200)
    
      for i := 0; i < 100; i++ {
           key := fmt.Sprintf("stu%02d",i) //生成stu开头的字符串
           value := rand.Intn(100)
           scoreMap[key] = value
     }
     //取出map中的所有key存入切片 keys
     var keys = make([]string, 0, 200)
     for key := range scoreMap {
           keys = append(keys,key)
     }
     //对切片进行排序
     sort.Strings(keys)
     //按照排序后的key遍历 map
     for _, key := range keys {
          fmt.Println(key,scoreMap[key])
     }    
} 

 

 

元素为 map类型的切片

 

以上是关于Go map的主要内容,如果未能解决你的问题,请参考以下文章

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

你知道的Go切片扩容机制可能是错的

CSP核心代码片段记录

RecyclerView holder中的Android Google Maps动态片段

将多个输出中的hls属性设置为单独的片段代码

[12 Go语言基础-Maps]