电子商务网站建设技术规范,销售管理软件排名,修车店怎么做网站,建设网站要钱吗文章目录Go语言中的map集合1-1 定义1-2 map遍历1-3 map集合删除1-4 map是引用类型Go语言中的map集合
Go 语言提供了内置类型 map集合#xff0c;它将一个值与一个键关联起来#xff0c;可以使用相应的键检索值。
map是一种集合#xff0c;可以像遍历数组或切片那样去遍历它…
文章目录Go语言中的map集合1-1 定义1-2 map遍历1-3 map集合删除1-4 map是引用类型Go语言中的map集合
Go 语言提供了内置类型 map集合它将一个值与一个键关联起来可以使用相应的键检索值。
map是一种集合可以像遍历数组或切片那样去遍历它。因为map是由Hash表实现的所以对map的读取顺序不固定。map是无序的每次打印出来的map都会不一样它不能通过index获取而必须通过key获取。map的长度是不固定的和切片一样可以扩展。
内置的len()函数同样适用于map返回map拥有的键值对的数量。但是map不能通过cap()函数计算容量或者说cap()函数的参数不可以是map。 同一个map中key必须保证唯一。key的数据类型必须是可参与比较运算的类型也就是支持或!操作的类型如布尔型、整型、浮点型、字符串、数组。切片、函数等引用类型则不能作为key的数据类型。 map的value可以是任何数据类型。map和切片一样也是一种引用类型。
1-1 定义
map声明 使用make()函数变量名 : make(map[key类型]value类型) 该声明方式如果不初始化mapmap也不等于nil。 使用var关键字定义mapvar 变量名 map[key类型] value类型 使用var关键字声明map未初始化的map的默认值是nil。nil map不能存放键值对。如果要使用map存储键值对必须在声明时初始化或者使用make()函数分配到内存空间。
1-2 map遍历
map的初始化赋值和遍历
package mainimport fmtfunc main() {//1、声明时同时初始化var country map[string]string{China: Beijing,Japan: Tokyo,India: New Delhi,France: Paris,Italy: Rome,}fmt.Println(country)// 短变量声明初始化方式rating : map[string]float64{c: 5, Go: 4.5, Python: 4.5, C: 3}fmt.Println(rating)//2、创建map后再赋值countryMap : make(map[string]string)countryMap[China] BeijingcountryMap[Japan] TokyocountryMap[India] New DelhicountryMap[France] PariscountryMap[Italy] Rome//3、遍历map无序//(1)、key 、value都遍历for k, v : range countryMap {fmt.Println(国家, k, 首都, v)}fmt.Println(-----------)//(2)、只展示valuefor _, v : range countryMap {fmt.Println(国家, 首都, v)}fmt.Println(-----------)//(3)、只展示keyfor k : range countryMap {fmt.Println(国家, k, 首都, countryMap[k])}
}查看元素在集合中是否存在 可以通过key获取map中对应的value值。语法为map[key]。当key不存在时会得到该value值类型的默认值比如string类型得到空字符串int类型得到0程序不会报错。可以通过value, ok : map[key]获知key/value是否存在。ok是bool型如果ok是true则该键值对存在否则不存在。
package mainimport fmtfunc main() {countryMap : make(map[string]string)countryMap[China] BeijingcountryMap[Japan] TokyocountryMap[India] New DelhicountryMap[France] PariscountryMap[Italy] Rome//查看元素是否在map中存在value, ok : countryMap[England]fmt.Printf(%q \n, value)fmt.Printf(%T , %v \n, ok, ok)if ok {fmt.Println(首都, value)} else {fmt.Println(首都信息未检索到)}//或者if value, ok : countryMap[USA]; ok {fmt.Println(首都, value)} else {fmt.Println(首都信息未检索到)}
}1-3 map集合删除 delete(map, key) 函数用于删除集合的某个元素参数为map和其对应的key。删除函数不返回任何值。 Go语言没有为map提供清空所有元素的函数清空map的唯一办法是重新make一个新的map。不用担心垃圾回收的效率Go语言的垃圾回收比写一个清空函数更高效。
package mainimport fmtfunc main() {//1、声明并初始化一个mapmap1 : map[string]string{element: div,width: 100px,height: 200px,border: solid,background: none,}//2、根据key删除map中的某个元素fmt.Println(删除前, map1)if _, ok : map1[background]; ok {delete(map1, background)}fmt.Println(删除后, map1)//3、清空map//map1 map[string]string{}map1 make(map[string]string)fmt.Println(清空后, map1)
}1-4 map是引用类型
map与切片相似都是引用类型。将一个map赋值给一个新的变量时它们指向同一块内存底层数据结构。修改两个变量的内容都能够引起它们所指向的数据发生变化。
package mainimport fmtfunc main() {personSalary : map[string]int{Steven: 18000,Daniel: 5000,Josh: 20000,}fmt.Println(原始薪资, personSalary)newPersonSalary : personSalarynewPersonSalary[Daniel] 8000fmt.Println(修改后newPersonSalary, newPersonSalary)fmt.Println(personSalary受影响情况, personSalary)
}虽然就底层而言所有的数据都是由比特组成但计算机一般操作的是固定大小的数如整型、浮点型、布尔型、字符串、字符byte、rune等。进一步将这些数组织在一起就可表达更多的对象。
Go语言提供了丰富的数据组织形式这依赖于Go语言内置的数据类型。这些内置的数据类型如函数与指针、数组、切片、map等兼顾了硬件的特性和表达复杂数据结构的便捷性。