代码改变世界

30_map的使用

2019-09-08 16:21  StevenZhao  阅读(200)  评论(0)    收藏  举报
1.散列表是设计精妙,用途广泛的数据结构之一,他是一个拥有键值对元素的无序集合.在这个集合中,键的值是唯一的,
  键对应的值,可以通过键来获取,更新,或移除.

2.Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序的key—value对的集合,比如以身份证号作为
  唯一键来标识一个人的信息

3.map的格式:map[key Type]vaule Type

 

 

代码如下:

 

package main

import "fmt"

func main() {

	//1.map的创建
	var m1 map[int]string  //只是声明了一个map,并没有初始化,此时为空(nil)的map
	fmt.Println(m1 == nil) //true
	fmt.Println(len(m1))   //0
	//不能向没有初始化的map赋值
	//m1["steven"]=21//err

	//m2,m3的创建方式等价
	m2 := map[int]string{}
	m3 := make(map[int]string)
	fmt.Println(m2, m3) //map[],map[]

	m4 := make(map[int]string, 4) //指定map的容量,但是map没有cap函数
	fmt.Println(len(m4))          //0

	//2.map的初始化

	//定义并初始化
	var a1 map[int]string = map[int]string{}
	fmt.Println(a1) //map[]
	//初始化之后就可以赋值了
	a1[1] = "steven"
	fmt.Println(a1)
	var a2 map[int]string = map[int]string{1: "steven", 2: "Alice"}
	//map的存储是无序的所以打印也是无序的
	fmt.Println(a2)

	//自动推导类型
	b1 := map[int]string{1: "steven", 2: "Alice"}
	b2 := make(map[int]string)
	b2[1] = "steven"
	b2[2] = "alice"
	fmt.Println(b1, b2)
	b3 := make(map[int]string, 4) //分配一个容量为4的map
	//map 容量不够时,go底层会自动为map分配空间
	b3[1] = "steven"
	b3[2] = "yoyo"
	b3[3] = "san"
	b3[4] = "alice"
	b3[5] = "zhao"
	fmt.Println(len(b3)) //5,自动扩容,和append相似

	//遍历
	for key, val := range b3 {
		fmt.Printf("b3[%d]=%s\n", key, val)

	}

	//迭代遍历2 第一个返回值是key,第二个返回值可以省略
	for key := range b3 {
		fmt.Printf("b3[%d]=%s\n", key, b3[key])

	}

	//判断某个map key是否存在,如果存在,第一个返回值是value,第二个是bool类型,存在是true
	value, ok := b2[3]
	fmt.Printf("b2[3]=%s,bool=%v\n", value, ok) //b2[3]=,bool=false
	value, ok = b2[2]
	fmt.Printf("b2[2]=%s,bool=%v\n", value, ok) //b2[2]=alice,bool=true

	//删除指定key值的map
	delete(b2, 2)
	fmt.Println(b2)

	//map做函数的参数传递(引用传递)
	test(b3, 2)
	fmt.Println(b3) //map[4:alice 5:zhao 1:steven 3:san]
}

//map做函数参数,引用传递,删除map指定key
func test(m map[int]string, a int) {
	for key, _ := range m {
		if key == a {
			delete(m, a)
		}
	}
}