已复制
全屏展示
复制代码

Go语言之map总结

· 1 min read

一. map声明

  • key必须是支持==和!=比较的类型,比如int、string等, value可以是任意类型,因此value可以嵌套
// 完整写法
var m map[string]int = make(map[string]int)

// 简短写法
m := make(map[string]int)

// value嵌套
a := map[int]map[int]string{}
  • nill map
    只有仅写var m map[key_type]value_type才能得到nil map,一旦初始化,即m = make(map[key_type]value_type)就不是nil map

二. 字面量初始赋值

type Vertex struct {
	Lat, Long float64
}

func main() {
	var m = map[string]Vertex{
		"Baidu": Vertex{
			Lat:  0.3,
			Long: 0.3,
		},
		"Google": Vertex{
			Lat:  0.4,
			Long: 0.4,
		},
	}
	fmt.Println(m)
	fmt.Printf("%T", m)
}

map[Baidu:{0.3 0.3} Google:{0.4 0.4}]
map[string]main.Vertex


// 可以简写
var m = map[string]Vertex{
	"Baidu":  {0.3, 0.3},
	"Google": {0.4, 0.4},
}

三. struct用作key和value

type Key struct {
	a, b string
}

type Value struct {
	c, d int
}

func main() {
	var m = make(map[Key]Value)
	m[Key{"A", "B"}] = Value{1, 2}

	fmt.Println(m[Key{"A", "B"}])
	fmt.Println(m)
	fmt.Printf("%T\n", m)
}

{1 2}
map[{A B}:{1 2}]
map[main.Key]main.Value

四. 判断key是否存在

  • 当给定的key不存在时,获取的值为value类型的默认值(int为0,string为"")
m := map[string]int{"a": 10, "b": 20}
fmt.Println(m["c"])
c, exists := m["c"]
if exists {
	fmt.Println("exists: ", c)
} else {
	fmt.Println("not exists:", c)
}

五. 删除元素

delete(m, key)
🔗

文章推荐