此代码包含了go语言的map类型的初始化、添加、修改、删除、获取、自增、遍历、获取所有key到一个切片、按key排序、nil判等、切片类型转换为key、map作为函数参数等基本使用方法,废话不多说,直接上代码,每一个用法前都有注释,最后是运行结果截图,代码可直接拷贝运行,操作几下就掌握了。
// map 试用
// @author Jenking
package main
import (
"fmt"
"sort"
)
func main() {
// map 初始化1
map1 := make(map[string]bool)
fmt.Printf("map1 初始化:%vn", map1)
//map 初始化2
map2 := map[string]int{
"php": 1,
"mysql": 2,
"go": 3,
}
fmt.Printf("map2 初始化:%vn", map2)
//map 修改和添加
map3 := map[string]int{
"zhangsan": 45,
"lisi": 56,
"wangwu": 18,
}
map3["zhangsan"] = 33 // 存在的key是修改
map3["zhaoliu"] = 38 // 不存在的key是添加
fmt.Printf("map3 修改和添加:%vn", map3)
//map 删除
map4 := map[string]int{
"apple": 10,
"pear": 18,
"orange": 15,
}
delete(map4, "orange")
delete(map4, "banana") // key不存在也没关系
fmt.Printf("map4 删除:%vn", map4)
//map 获取
map5 := map[string]int{
"rice": 800,
"bread": 2,
"milk": 1,
}
rice := map5["rice"] //能娶到值 800
fmt.Printf("map5 获取: rice 能取到值: %dn", rice)
juice := map5["juice"] //取不到,默认0值
fmt.Printf("map5 获取: juice 取不到值,默认0值: %dn", juice)
//map 自增
map6 := map[string]int{
"yanwang": 1000,
}
map6["yanwang"]++
map6["xiaogui"]++ //默认0值也能自增
fmt.Printf("map6 自增: %vn", map6)
//map 遍历,顺序不确定
map7 := map[string]int{
"tiger": 1,
"elephant": 1,
"monkey": 20,
"duck": 60,
}
fmt.Print("map7 遍历: ")
for k, v := range map7 {
fmt.Printf("键: %s, 值: %dt", k, v)
}
//map 获取所有key到一个切片
map8 := map[string]int{
"Monday": 1,
"Tuesday": 2,
"Wednesday": 3,
"Thursday": 4,
"Friday": 5,
"Saturday": 6,
"Sunday": 7,
}
weeks := make([]string, 0, len(map8))
for d, _ := range map8 {
weeks = append(weeks, d)
}
fmt.Printf("map8 键集合: %vn", weeks)
// 排序键集合
sort.Strings(weeks) //sort排序会改变参数
fmt.Printf("map8 排序后键集合: %vn", weeks)
// 输出排序后map
fmt.Println("map8 排序后遍历:")
for _, d := range weeks {
fmt.Printf("%s: %dt", d, map8[d])
}
fmt.Println()
// map的0值是nil
var map9 map[string]int
fmt.Printf("map9 == nil is: %tn", map9 == nil)
// nil的map插入元素会异常,先创建再插入
//map9["insert"] = 10
map9 = map[string]int{}
map9["insert"] = 10
fmt.Printf("map9 nil创建后再插入: %vn", map9)
// map 取值可以返回双值
map10 := map[string]int{
"January": 1,
"February": 2,
}
fmt.Printf("map10 : %vn", map10)
January, ok1 := map10["January"]
fmt.Printf("map10 取双值,January:%v, ok: %vn", January, ok1)
March, ok2 := map10["March"]
fmt.Printf("map10 取双值,March:%v, ok: %vn", March, ok2)
// map 切片类型转换为 K
var map11 = make(map[string]int)
var list = []string{"hello"}
map11[k(list)] = 3
fmt.Printf("map11 切片类型转换为K: %vn", map11)
// map 函数传参
var map12 = map[string]int{
"zhang": 15,
}
fmt.Printf("map12 原始值:%vn", map12)
assign(map12)
fmt.Printf("map12 函数assign之后值:%vn", map12)
modify(map12)
fmt.Printf("map12 函数modify之后值:%vn", map12)
}
// 将切片转换为可判等类型
func k(list []string) string {
return fmt.Sprintf("%q", list)
}
// 通过赋值改变 map, 不起作用
func assign(m map[string]int) {
m = map[string]int{
"li": 16,
}
}
// 通过修改元素改变 map
func modify(m map[string]int) {
m["li"] = 16
}
运行结果:
map1 初始化:map[]
map2 初始化:map[go:3 mysql:2 php:1]
map3 修改和添加:map[lisi:56 wangwu:18 zhangsan:33 zhaoliu:38]
map4 删除:map[apple:10 pear:18]
map5 获取: rice 能取到值: 800
map5 获取: juice 取不到值,默认0值: 0
map6 自增: map[xiaogui:1 yanwang:1001]
map7 遍历: 键: elephant, 值: 1 键: monkey, 值: 20 键: duck, 值: 60 键: tiger, 值: 1 m
ap8 键集合: [Sunday Monday Tuesday Wednesday Thursday Friday Saturday]
map8 排序后键集合: [Friday Monday Saturday Sunday Thursday Tuesday Wednesday]
map8 排序后遍历:
Friday: 5 Monday: 1 Saturday: 6 Sunday: 7 Thursday: 4 Tuesday: 2 W
ednesday: 3
map9 == nil is: true
map9 nil创建后再插入: map[insert:10]
map10 : map[February:2 January:1]
map10 取双值,January:1, ok: true
map10 取双值,March:0, ok: false
map11 切片类型转换为K: map[[“hello”]:3]
map12 原始值:map[zhang:15]
map12 函数assign之后值:map[zhang:15]
map12 函数modify之后值:map[li:16 zhang:15]



