码迷,mamicode.com
首页 > 其他好文 > 详细

Go map

时间:2020-04-27 15:45:24      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:print   ++   app   顺序   else   als   val   password   span   

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\n",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

标签:print   ++   app   顺序   else   als   val   password   span   

原文地址:https://www.cnblogs.com/s686zhou/p/12786602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!