map 介绍

golang 数据结构之map

介绍

map是hash table数据结构,它支持快速的查找、增加和删除。

定义和声明

map[keyType]ValueType

其中 keyType 必须是可比较的数据类型 (golang官网说明),比如 布尔类型(bool)、数值类型(int, uint, float等)、string、指针(pointer)、通道(channel)、接口(interface)或者包含以上基础类型的 struct、arrays。 但是不支持 切片(slices)、map、函数(function)。

valueType 支持任何数据类型

这样定义一个map,maps的值为nil,必须重新进行赋值才能够访问,若直接进行访问,会导致runtime panic。

var maps map[int]int

建议通过make定义一个map,这样在创建的时候make会分配和初始化一个hash map数据结构。

maps := make(map[int]int)

map的使用

map支持存在与不存在的key值进行访问,若key值存在返回,相应的value;若不存在返回valueType的零值

maps := make(map[int]int)
maps[1] = 2
maps[3] = 4

s1 := maps[1] // s1 == 1
s2 := maps[2] //s1 == 2

支持判断是否当前key值存在

s3, ok := maps[3] // s3 == 4, ok == true
s4, ok := maps[4] // s4 == 0, ok == false

遍历map

通过range函数来遍历map,支持俩种遍历方式, 且都是无序遍历的。

  1. 只获取key值
for k := range maps {
    // 使用k
}
  1. 获取kv值
for k, v := range maps {
    // 使用 k,v
}
  1. 有序的遍历map
import "sort"

var maps map[int]int
var keys []int
for k := range maps {
    keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
    fmt.Println("Key:", k, "Value:", maps[k])
}