golang基础复合类型—map

一、map结构简介

1.数组、切片的问题 

names := []string{"Alicy","Bob","Mike","Rita"}
//想要取出Mike的名字,我们需要数一数,Mike在第三个位置
fmt.println(names[2])

有没有一种结构能够帮助我们快速 的取出数据呢?——map结构(字典结构)

2.map概念

Go语言中的字典结构是由键和值构成的,所谓键类似于新华字典的部首或者拼音,可以快速的查询对应的数据。字典的键是不允许重复的,具有唯一性,就像身份证号一样。

map是一种无序的键值对的集合。

map最重要的一点是通过key来快速的检索数据,key类似于索引,指向数据的值。

 二、map的创建与初始化

1.map的创建

  • var map名称 map[键的类型]值的类型
var m map[int]string //键为int类型,值为string类型
  • map名称 := map[键的类型]值的类型{}
m := map[int]string{} //键的类型为int,值的类型为string
  • make(map[键的类型]值的类型)
m := make(map[int]string) //键的类型为int,值的类型为string

2.初始化

  •  var map名称 map[键的类型]值的类型
 //键为int类型,值为string类型
var m map[int]string = map[int]string{1:"Bob",2:"Mike"}
  • map名称 := map[键的类型]值的类型{}
//键的类型为int,值的类型为string
m := map[int]string{1:"Bob",2:"Mike"} 
  • make(map[键的类型]值的类型)
//键的类型为int,值的类型为string
m := make(map[int]string) 
m[1] = "Mike"
m[2] = "Bob"
m[2] = "Rita" //这种情况下,key如果一致的话,是完成修改,编译不会报错

三、map 的键与值

  • 通过key获取值
package main

import "fmt"

func main()  {
	m := map[int]string{1:"Bob",2:"Mike"}
	fmt.Println(m[1])
}

 输出:

Bob

  • 通过key获取值时,判断是否存在
package main

import "fmt"

func main()  {
	m := map[int]string{1:"Bob",2:"Mike"}
	value,ok := m[1]
	if ok{
		fmt.Println(value)
	}else {
		fmt.Println("不存在该value")
	}
	value,ok = m[3]
	if ok{
		fmt.Println(value)
	}else {
		fmt.Println("不存在该value")
	}
}

输出:

Bob
不存在该value 

  • 通过循环的方式获取值
package main

import (
	"fmt"
)

func main()  {
	m := map[int]string{1:"Bob",2:"Mike"}
	for key,value := range m{
		fmt.Println(key,":",value)
	}
}

输出:

1 : Bob
2 : Mike 

  • 通过key删除某个值
package main

import "fmt"

func main()  {
	m := map[int]string{1:"Bob",2:"Mike"}
	delete(m,2)
	fmt.Println(m)
}

输出: 

map[1:Bob] 


三、map作为函数参数

1.基本语法

//定义一个函数将map传参
func 函数名(map){
    函数体
}

//调用
函数名(map)
package main

import "fmt"

func main()  {
	m := map[int]string{1:"Bob",2:"Mike"}
	PrintMap(m)
}
func PrintMap(m map[int]string)  {
	fmt.Println(m)
}

输出:

map[1:Bob 2:Mike]

2.注意事项

在函数中修改或删除map的值,会影响到原map。

package main

import "fmt"

func main()  {
	m := map[int]string{1:"Bob",2:"Mike"}
	PrintMap(m)
}
func PrintMap(m map[int]string)  {
	m[2] = "我在函数执行时被修改了..."
	fmt.Println(m)
}

输出:

map[1:Bob 2:我在函数执行时被修改了...]

四、map案例 

有一个英文字符串,统计每个字母出现的次数。

package main

import "fmt"

func main()  {
	s := "abcdfgghhwraaaaaaaaaaa"
	m := CountOfAbc(s)
	for key,value := range m{
		fmt.Println(key,":出现",value,"次")
	}
}
func CountOfAbc(s string) map[string]int {
	m := map[string]int{}
	for _,value := range s{
		//fmt.Println(string(value))
		m[string(value)] += 1
	}
	return m
}

输出:

a :出现 12 次
c :出现 1 次
h :出现 2 次
w :出现 1 次
b :出现 1 次
d :出现 1 次
f :出现 1 次
g :出现 2 次
r :出现 1 次

猜你喜欢

转载自blog.csdn.net/weixin_41551445/article/details/126299446