如何高效学习Go语言的map使用技巧?

2026-05-06 04:131阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计761个文字,预计阅读时间需要4分钟。

如何高效学习Go语言的map使用技巧?

使用map映射关系容器时,内部使用散列表(hash表)实现。map是引用类型,必须初始化后才能使用。它是一种无序的基于key-value的数据结构。map定义:map[KeyType]ValueType,其中,KeyType表示键的类型。

map

  • 映射关系容器 内部使用散列表(hash)实现
  • map是引用类型 必须初始化才能使用
  • 无序的基于key-value的数据结构

map定义

map的定义语法:

如何高效学习Go语言的map使用技巧?

map[KeyType]ValueType

其中,

  • KeyType:表示键的类型。
  • ValueType:表示键对应的值的类型。

map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:

make(map[KeyType]ValueType, [cap])

其中cap表示map的容量,该参数不是必须的,但是在初始化map的时候应该为其指定一个合适的容量

map基本使用

判断某个键是否存在

判断map中键是否存在 :

value, ok := map[key]

map的遍历

使用for range遍历map

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

delete()格式:

delete(map, key)

其中,

  • map:表示要删除键值对的map
  • key:表示要删除的键值对的键

go doc builtin.delete 查看文档

package main import "fmt" // map func main(){ var m1 map[string]int fmt.Println(m1==nil) // 还没有初始化(没有在内存中开辟空间) m1 = make(map[string]int, 10) // 要估算号该map容量,避免在程序运行期间再动态扩容 m1["理想"] = 18 m1["李时珍"] = 35 fmt.Println(m1) fmt.Println(m1["理想"]) // 约定成俗用OK接收返回的布尔值 fmt.Println(m1["貂蝉"]) // 0 如果不存在这个key拿到对应值类型的零值 value, ok := m1["貂蝉"] if !ok { fmt.Println("查无此key") } else { fmt.Println(value) } // map的遍历 for k, v := range m1 { fmt.Println(k, v) } // 遍历key for k := range m1 { fmt.Println(k) } // 只遍历value for _, v := range m1 { fmt.Println(v) } // 删除 delete(m1, "李时珍") fmt.Println(m1) delete(m1, "李白") // 删除不存在的key }

按照指定顺序遍历map

package main import ( "fmt" "math/rand" "sort" "time" ) 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) //生成0~99的随机整数 scoreMap[key] = value } fmt.Println(scoreMap) //取出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

一定要初始化

package main import "fmt" // map和slice组合 func main(){ // 元素类型为map的切片 // var s1 = make([]map[int]string, 0, 10) // 长度为0 内部没有元素 // var s1 = make([]map[int]string, 1, 10) var s1 = make([]map[int]string, 10, 10) // 没有对内部的map做初始化 // s1[0][100] = "A" s1[0] = make(map[int]string, 1) s1[0][10] = "泰山" // fmt.Println(s1) // index out of range [0] with length 0 // fmt.Println(s1) // panic: assignment to entry in nil map fmt.Println(s1) // [map[10:泰山] map[] map[] map[] map[] map[] map[] map[] map[] map[]] // 值为切片类型的map var m1 = make(map[string][]int, 10) m1["北京"] = []int{10, 20, 30} fmt.Println(m1) }

本文共计761个文字,预计阅读时间需要4分钟。

如何高效学习Go语言的map使用技巧?

使用map映射关系容器时,内部使用散列表(hash表)实现。map是引用类型,必须初始化后才能使用。它是一种无序的基于key-value的数据结构。map定义:map[KeyType]ValueType,其中,KeyType表示键的类型。

map

  • 映射关系容器 内部使用散列表(hash)实现
  • map是引用类型 必须初始化才能使用
  • 无序的基于key-value的数据结构

map定义

map的定义语法:

如何高效学习Go语言的map使用技巧?

map[KeyType]ValueType

其中,

  • KeyType:表示键的类型。
  • ValueType:表示键对应的值的类型。

map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:

make(map[KeyType]ValueType, [cap])

其中cap表示map的容量,该参数不是必须的,但是在初始化map的时候应该为其指定一个合适的容量

map基本使用

判断某个键是否存在

判断map中键是否存在 :

value, ok := map[key]

map的遍历

使用for range遍历map

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

delete()格式:

delete(map, key)

其中,

  • map:表示要删除键值对的map
  • key:表示要删除的键值对的键

go doc builtin.delete 查看文档

package main import "fmt" // map func main(){ var m1 map[string]int fmt.Println(m1==nil) // 还没有初始化(没有在内存中开辟空间) m1 = make(map[string]int, 10) // 要估算号该map容量,避免在程序运行期间再动态扩容 m1["理想"] = 18 m1["李时珍"] = 35 fmt.Println(m1) fmt.Println(m1["理想"]) // 约定成俗用OK接收返回的布尔值 fmt.Println(m1["貂蝉"]) // 0 如果不存在这个key拿到对应值类型的零值 value, ok := m1["貂蝉"] if !ok { fmt.Println("查无此key") } else { fmt.Println(value) } // map的遍历 for k, v := range m1 { fmt.Println(k, v) } // 遍历key for k := range m1 { fmt.Println(k) } // 只遍历value for _, v := range m1 { fmt.Println(v) } // 删除 delete(m1, "李时珍") fmt.Println(m1) delete(m1, "李白") // 删除不存在的key }

按照指定顺序遍历map

package main import ( "fmt" "math/rand" "sort" "time" ) 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) //生成0~99的随机整数 scoreMap[key] = value } fmt.Println(scoreMap) //取出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

一定要初始化

package main import "fmt" // map和slice组合 func main(){ // 元素类型为map的切片 // var s1 = make([]map[int]string, 0, 10) // 长度为0 内部没有元素 // var s1 = make([]map[int]string, 1, 10) var s1 = make([]map[int]string, 10, 10) // 没有对内部的map做初始化 // s1[0][100] = "A" s1[0] = make(map[int]string, 1) s1[0][10] = "泰山" // fmt.Println(s1) // index out of range [0] with length 0 // fmt.Println(s1) // panic: assignment to entry in nil map fmt.Println(s1) // [map[10:泰山] map[] map[] map[] map[] map[] map[] map[] map[] map[]] // 值为切片类型的map var m1 = make(map[string][]int, 10) m1["北京"] = []int{10, 20, 30} fmt.Println(m1) }