首页 > 其他 > 详细

Go map

时间:2020-05-13 09:24:43      阅读:48      评论:0      收藏:0      [点我收藏+]

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类型的切片

下面的代码演示了切片中的元素为map类型时的操作:

func main() {
      var mapSlice = make([]map[string]string,3)
      for index,value := range mapSlice {
           fmt.Printf("index:%d value:%v \n",index,value)
      }
      fmt.Println("after init")
      //对切片中的map元素进行初始化
      mapSlice[0] = make(map[string]string,10)
      mapSlice[0]["name"] = "小王子"
      mapSlice[0]["password"] = "123456"
      mapSlice[0]["address"] = "沙河"
      for index, value := range mapSlice {
            fmt.Printf("index:%d  value:%v \n", index, value)
      }
}

值为切片类型的map

下面的代码演示了map中值为切片类型的操作:

func main() {
      var sliceMap = make(map[string][]string, 3)
      fmt.Println(sliceMap)
      fmt.Println("after init")
      key := "中国"
      value, ok := sliceMap[key]
      if !ok {
          value = make([]string,0,2)
      }
      value = append(value, "北京",“上海”)
      sliceMap[key] = value
      fmt.Println(sliceMap)
}

Go map

原文:https://www.cnblogs.com/zhukaijian/p/12879957.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!