网站建设维护属于什么专业,学网站开发需要学什么,泰安网站seo,兴义城乡建设部网站学习了GO语言中数组#xff0c;切片类型#xff0c;但是我们发现使用数组或者是切片存储的数据量如果比较大#xff0c;那么通过下标来取出某个具体的数据的时候相对来说#xff0c;比较麻烦。例如#xff1a;
names : []string{张三,李四,切片类型但是我们发现使用数组或者是切片存储的数据量如果比较大那么通过下标来取出某个具体的数据的时候相对来说比较麻烦。例如
names : []string{张三,李四,王五}
fmt.Println(names[2])现在要取出切片中存储的“王五”那么需要数一下对应的下标值是多少这样相对来说就比较麻烦。有没有一种结构能够帮我们快速的取出数据呢就是字典结构。
说道字典大家想到的就是 在使用新华字典查询某个字我们一般都是根据前面的部首或者是拼音来确定出要查询的该字在什么位置然后打开对应的页码查看该字的解释。
GO语言中的字典结构是有键和值构成的。
所谓的键就类似于新华字典的部首或拼音可以快速查询出对应的数据。
如下图所示 通过该图发现某个键key都对应的一个值(value)如果现在要查询某个值直接根据键就可以查询出某个值。
在这里需要注意的就是字典中的键是不允许重复的就像身份证号一样。
一、 字典结构定义
map[keyType]valueType定义字典结构使用map关键字[ ]中指定的是键(key)的类型,后面紧跟着的是值的类型。
键的类型必须是支持和!操作符的类型切片、函数以及包含切片的结构类型不能作为字典的键使用这些类型会造成编译错误
//err invalid map key type []string
dict : map[[]string]int{} 下面定义一个字典m键的类型是整型值的类型是字符串。
var m map[int]string
fmt.Println(m)定义完后直接打印结果为空nil。
注意字典中不能使用cap函数只能使用len()函数。len()函数返回map拥有的键值对的数量
var m map[int]string
fmt.Println(len(m))以上代码值为0也就是没有值。
当然也可以使用make()函数来定义如下所示
m2 : make(map[int]string)
fmt.Println(m2)
fmt.Println(len(m2))以上代码值为0也就是没有值。
当然也可以指定容量。
m2 : make(map[int]string,3)
fmt.Println(m2)
fmt.Println(len(m2))输出的len值还是0因为这里并没有赋值。
接下来可以给字典m2进行赋值并且指定容量如果容量不够自动扩容。
m2 : make(map[int]string,3)m2[1] 张三
m2[2] 李四
m2[3] 王五fmt.Println(m2)
fmt.Println(len(m2))可以直接使用键完成赋值再次强调键是唯一的同时发现字典m2的输出结果不一定是按照赋值的顺序输出的每次运行输出的顺序可能都不一样所以这里一定要注意map是无序的我们无法决定它的返回顺序所以每次打印结果的顺利有可能不同。
map也可以定义完成后直接进行初始化
m4 : map[int]string{1:make,2:Go}
fmt.Println(m4[1])
fmt.Println(m4[2])也就是在定义的同时给他直接赋值,然后打印出来
二、 打印字典中的值
1. 可以直接通过键输出如下所示
m4 : map[int]string{1:make,2:Go}
fmt.Println(m4[1])//make
fmt.Println(m4[2])//go通过打印键的方式就能得到值
2. 通过循环遍历的方式输出
m4 : map[int]string{1:make,2:Go}
for key,value : range m4 {fmt.Println(key)fmt.Println(value)
}
//1 make
//2 go其中key代表的是键value代表的是值
输出的顺序是无序的。
3. 在输出的时候还可以进行判断。
m4 : map[int]string{1:make,2:Go}
value,ok : m4[1]
if ok true{fmt.Println(value)
}else{fmt.Println(key不存在)
}第一个返回值为key所对应的value, 第二个返回值为key是否存在的条件存在ok为true。
删除map中的某个元素。
根据map中的键删除对应的元素也是非常的方便。
如下所示
m4 : map[int]string{1:make,2:Go}
delete(m4,1) //删除key为1的内容
fmt.Println(m4)//2 gomap作为函数参数是引用传递。
func test(m map[int]string){delete(m,1)
}func main(){m4 : map[int]string{1:make,2:Go}test(m4)fmt.Println(m4)// 2 go
}
第一个Test定义了一个删除键为1的方法然后在main里面又重新初始化了一个map然后调用Test的方法,最后输出的结果就是go因为调用Test方法的时候把键为1的键值删除了。