go之map

一、概念

  • 简述
1、map 是一种无序的键值对的集合。(类似于python的字典dict)
2、map 的key 与 value 都是有类型的,且定义阶段时就已经统一
  • 定义方式
# 方式一
var mapName map[key_type]value_type
mapName = make(map[key_type]value_type)
// 如
//    var user map[string]string
//    user = make(map[string]string)


# 方式二 简短声明
mapName := make(map[key_type]value_type)
// 如
//    student := make(map[string]int)

# 方式三
mapName := map[key_type]value_type{}
// 如
// user := map[string]string{"jmz":"上海"}

二、声明、初始化、make

  • map 也是引用类型,需要make 创建内存
package main

import "fmt"

func main(){
	var user map[string]string

	user = make(map[string]string)
	user["jmz"] = "安工大"
	user["jly"] = "上核大"

	fmt.Println(user)


	data := make(map[string]int)
	data["info1"] = 32
	data["info2"] = 23

	fmt.Println(data)

	student := map[string]int{"jmz":23}
	fmt.Println(student)
}

三、map的增删改查

package main

import "fmt"

func main(){
	// 简短声明
	student := map[string]string{}


	// 增
	student["jmz"] = "上海"
	student["qqc"] = "北京"
	student["gka"] = "湖北"

	// 改
	student["jmz"] ="河南"

	// 查
	// 判断键是否存在
	v,ok := student["jms"] // ok == true 则jms 键存在对应的value
	if ok {
		fmt.Println(v)
	}

	// for-range
	for k,v := range student{
		fmt.Printf("key:%s,value:%s \n",k,v)
	}
	//你会发现map的输出 是无序的,因为本来map就无序,想要有序请使用 切片


	// 删
	delete(student,"jmz")  // 不存在的键删除 也不会报错
	// delete(student,"lll")  // 不会报错
	fmt.Println(student)

}

四、map 之函数

  • map 用法一
package main

import "fmt"

func main(){
	// 简短声明
	s := "中国是一个美丽的国家,China is a beautiful country"

	info := runeCount(s)
	for k,v := range info{
		fmt.Printf("%s : %d \n",string(k),v)
	}
}

// 字符串,解析每个字符的个数
func runeCount(s string)map[rune]int{
	info := map[rune]int{}


	for _,v := range []rune(s){
		info[v]++
	}
	return info
}
  • map 用法二 键值对调

package main
import (
	"fmt"
)

var (
	barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
		"delta": 87, "echo": 56, "foxtrot": 12,
		"golf": 34, "hotel": 16, "indio": 87,
		"juliet": 65, "kili": 43, "lima": 98}
)

func main() {
	invMap := make(map[int]string, len(barVal))
	for k, v := range barVal {
		invMap[v] = k
	}
	fmt.Println("inverted:")
	for k, v := range invMap {
		fmt.Printf("Key: %v, Value: %v / ", k, v)
	}
}

如果喜欢看小说,请到183小说网

posted @ 2019-03-31 22:23  xiaobaiskill  阅读(196)  评论(0编辑  收藏  举报