map

go语言中提供映射关系容器为map,其内部使用散列表 hash 实现。

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

map定义

go语言中map的定义语法如下:

map[keyType]valueType

简单的map

package main

import "fmt"

func main() {
  a1 := make(map[string]int, 10) //此处的容量最好估算好,避免动态扩容影响性能
  fmt.Println(a1)
}

map赋值

package main

import "fmt"

func main() {
  a1 := make(map[string]int, 10) //此处的容量最好估算好,避免动态扩容影响性能
  fmt.Println(a1)
  a1["王五"] = 20
  a1["张三"] = 999
  fmt.Println(a1)
}

判断某个键存不存在

package main

import (
  "fmt"
)

func main() {
  a1 := make(map[string]int, 10) //此处的容量最好估算好,避免动态扩容影响性能
  fmt.Println(a1)
  a1["王五"] = 20
  a1["张三"] = 999
  fmt.Println(a1)
  value, ok := a1["李四"] 
  if !ok { //这里是约定成俗的用ok来接收布尔值
    fmt.Println("查无次key")
  } else {
    fmt.Println(value)
  }
}

map的遍历

遍历key和value

  for key, value := range a1 {
    fmt.Println(key, value)
  }

遍历key

  for key := range a1 {
    fmt.Println(key)
  }

遍历value

  for _, value := range a1 {
    fmt.Println(value)
  }
  //使用匿名函数即可

map key的删除

  delete(a1, "张三")
  //delete(map的变量名,需要删除的key名)
  fmt.Println(a1)
  //注意删除一个空值也不会报错
  delete(a1, "张飞")

map指定顺序

package main

import (
  "crypto/rand"
  "fmt"
  "sort"
  "time"
)

func main() {
//生成随机数
  rand.Seed(time.Now().UnixNano())
  var scoreMap = make(map[string]int, 200)
//将生成的随机数存入map中,这里的map的key和value分别是学生学号,学生成绩,现在要求是按照成绩排序从高往低排
  for i := 0; i < 100; i++ {
    key := fmt.Sprintf("stu%02d", i)
    value := rand.Intn(100)
    scoreMap[key] = value
  }
//将要排序的key值保存到切片中
  var keys = make([]string, 0, 200)
  for key := range scoreMap {
    keys = append(keys, key)
  }
  //排序
  sort.Strings(keys)
  //输出排序的内容
  for _, key := range keys {
    fmt.Println(key, scoreMap[key])
  }
}

// 执行不成功,应该是所用的包发生了变化

map和slice组合初始化

元素为map类型的切片

slice名称 := make([]map[map的key的类型]map的value的类型,slice的长度大小,slice的存储大小)
//还要再初始化map
slice名称[0] = make(map[map的key类型]map的value的类型,map的存储大小)

使用

package main

import "fmt"

func main() {
  a1 := make([]map[int]string, 5, 10)

  a1[0] = make(map[int]string)

  a1[0][100] = "优秀"
  fmt.Println(a1)
}

值为切片类型的map

map的名称 := make([map的key的类型][]切片的类型)

使用

package main

import "fmt"

func main() {
  m1 := make(map[string][]int, 10)

  m1["北京"] = []int{1, 2, 3, 4}
  fmt.Println(m1)
}
posted @ 2023-02-08 20:49  suknna  阅读(77)  评论(0)    收藏  举报