Golang Map

1. map 的定义和初始化

  • Map 是 go 内置的数据结构,是一种无序的键值对的集合,可以通过 key 快速找到 value 的值
  • Map 必须初始化才能使用,否则报错

定义 Map

var 变量名 map[key的数据类型] value的数据类型

创建 map

package main

import "fmt"

func main() {
	// 1. 创建空map
	var m1 map[string]int
	fmt.Println(m1 == nil)
	fmt.Println(m1)

	// 2. :=
	m2 := map[string]int{}
	fmt.Println(m2)
	m3 := make(map[string]int)
	fmt.Println(m3)

	// 3. 指定长度make
	m4 := make(map[string]int, 10)
	fmt.Println(m4)
}

初始化 map

package main

import "fmt"

func main() {
	// 1. 定义并初始化
	var m1 map[int]string = map[int]string{1: "hello", 2:"world"}
	fmt.Println(m1)

	// 2. 自动推导
	m2 := map[int]string{1: "world", 2: "hello"}
	fmt.Println(m2)
}

2. 键值操作

package main

import "fmt"

func main() {
	m1 := map[int]string{1: "a", 2: "b"}
	// 修改
	fmt.Println(m1)
	m1[1] = "abc"
	fmt.Println(m1)

	// 增加
	m1[3] = "aaa"
	m1[5] = "bbb"
	fmt.Println(m1)

	// 删除
	delete(m1, 1)
	fmt.Println(m1)
}

3. 遍历

package main

import "fmt"

func main() {
	m := map[int]string{1: "a", 2: "b", 3: "c", 5: "d"}

	for k, v := range m {
		fmt.Printf("key: %d, value: %s\n", k, v)
	}
}

4. 其他操作

查找某个键是否存在

package main

import "fmt"

func main() {
	m := map[int]string{1: "a", 2: "b", 3: "c", 5: "d"}

	v, ok := m[1]
	if ok {
		fmt.Println("指定key存在", v)
	} else {
		fmt.Println("指定key不存在", v)
	}
}

对无序的 map 进行排序

package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[int]string{1: "a", 3: "c", 2: "b", 5: "d"}

	// 将map中所有的key存储到一个切片中
	var allKey []int
	for k, _ := range m {
		allKey = append(allKey, k)
	}

	// 对切片进行排序
	sort.Ints(allKey)

	// 通过排序好的切片从map中取有序的数值
	for _, k :=range allKey {
		fmt.Printf("key: %d, value: %s\n", k, m[k])
	}
}

map 是引用类型

package main

import "fmt"

// 函数内修改
func modify(m map[int]string) {
	m[105] = "abc"
}

func main() {
	m := make(map[int]string)
	m[101] = "a"
	m[102] = "b"
	m[105] = "c"
	fmt.Println("m", m)

	// 赋值给其他
	b := m
	b[101] = "123"
	fmt.Println("b", b)
	fmt.Println("m", m)

	modify(m)
	fmt.Println("m", m)
}

map 类型的切片初始化

package main

import "fmt"

func main() {
	// map类型的切片
	sm := []map[int]string{}
	// 初始化一个slice的map值
	ss := make(map[int]string)
	// 将map类型append到切片中
	sm = append(sm, ss)

	fmt.Println(sm)
}

值为切片类型的 map

package main

import "fmt"

func main() {
	// 定义一个map值为切片类型的map
	ms := make(map[int][]int)
	// 初始化map值为切片类型的值
	ms[0] = make([]int,5)

	fmt.Println(ms)
}
posted @ 2020-03-17 13:07  ZhiChao&  阅读(351)  评论(0编辑  收藏  举报