带询盘外贸网站源码,wordpress 连接信息,国外网站建设,wordpress企业汉化主题Golang中的map基本介绍基本语法map声明的举例map使用的方式map的增删改查操作map的增加和更新map的删除map的查找map的遍历map切片基本介绍map排序map的使用细节基本介绍
map是key-value数据结构#xff0c;又称为字段或者关联数组。类似其它编程语言的集合#xff0c;在编程…
Golang中的map基本介绍基本语法map声明的举例map使用的方式map的增删改查操作map的增加和更新map的删除map的查找map的遍历map切片基本介绍map排序map的使用细节基本介绍
map是key-value数据结构又称为字段或者关联数组。类似其它编程语言的集合在编程中是经常使用到的7
基本语法
var map变量名 map[keytype]valuetype
key可以是什么类型golang中的map的key可以是很多种类型比如bool数字string指针channel还可以是值包含前面几个类型的接口结构体数组通常为intstring。value的类型和key基本一样通常为数字stringmapstruct。注意slicemap还有function不可以因为这几个没法用 来判断
map声明的举例
var a map[string]sting
var a map[string]int
var a map[int]sting
var a map[string]map[sting]string
注意声明是不会分配内存的初始化需要make分配内存后才能赋值和使用。
package main
import (fmt
)func main() {//map的声明和注意事项var a map[string]string//在使用map需要先makemake的作用就给map分配给map分配数据空间a make(map[string]string)a[no1] kunkuna[no2] kuna[no3] heizia[no1] kunfmt.Println(a)
}//map[no1:kun no2:kun no3:heizi]说明
1.map在使用前一定要make2.map的key是不能重复如果重复了则以最后这个key-value为准3.map的value是可以相同的4.map的key-value是无序的5.make在映射中的说明初始分配的创建取决于size但产生的映射长度为0.size可以省略这种情况下就会分配一个小的起始大小
map使用的方式
package main
import (fmt
)func main() {//第一种方式,先声明再makevar a map[string]string//在使用map需要先makemake的作用就给map分配给map分配数据空间a make(map[string]string)a[no1] kunkuna[no2] kuna[no3] heizia[no1] kunfmt.Println(a)//第二种方式声明就直接makecities : make(map[string]string)cities[no1] changshangcities[no2] beijingcities[no3] shanghaifmt.Println(cities)//第三种方式声明直接赋值heroes : map[string]string{hero1 : jingze, hero3 : wang, hero2 : kun, }fmt.Println(heroes, heroes)
}/*
map[no1:kun no2:kun no3:heizi]
map[no1:changshang no2:beijing no3:shanghai]
heroes map[hero1:jingze hero2:kun hero3:wang]
*/
map的增删改查操作
map的增加和更新
map[“key”] value //如果可以还没有就是增加如果key存在就是修改 map的删除
deletemap“key”,delete是一个内置函数如果key存在就删除该key-value如果key不存在不操作但是也不会报错如果我们要删除map所有地key没有一个专门的方法一次删除可以遍历一下key逐个删除或者mapmake(…)make一个新的让原来的成为垃圾被gc回收 map的查找
package main
import (fmt
)func main() {cities : make(map[string]string)cities[no1] changshangcities[no2] beijingcities[no3] shanghaival, ok : cities[no1]if ok{fmt.Println(找到了cities, val)} else {fmt.Println(没有找到这个可以)}}//找到了cities changshangmap的遍历
map的遍历使用for-range的结构遍历
package main
import (fmt
)func main() {cities : make(map[string]string)cities[no1] changshangcities[no2] beijingcities[no3] shanghaifor k, v : range cities{fmt.Printf(k%v v%v\n,k,v)}
}/*
kno1 vchangshang
kno2 vbeijing
kno3 vshanghai
*/
map切片
基本介绍
切片 数据类型如果是map我们称为slice of mapmap切片这样使用则map个数就可以动态变化了。
package main
import (fmt
)func main() {var monsters []map[string]stringmonsters make([]map[string]string, 2)if monsters[0] nil{monsters[0] make(map[string]string,2)monsters[0][name] kunkunmonsters[0][age] 38}if monsters[1] nil{monsters[1] make(map[string]string,2)monsters[1][name] kunmonsters[1][age] 18}//动态的增加monster//先定义一个monster信息newMonster : map[string]string{name : heizi,age : 45,}monsters append(monsters, newMonster)fmt.Println(monsters)
}//[map[age:38 name:kunkun] map[age:18 name:kun] map[age:45 name:heizi]]
map排序
1.golang中没有一个专门的方法针对map的key进行排序2.golang中的map默认时无序的没注意也不是按照添加的顺序存放的每次遍历得到的输出结果可能不一样3.golang中的map排序是先将key进行排序然后根据key值遍历输出即可
package main
import (fmtsort
)func main() {//map的排序map1 : make(map[int]int, 10)map1[10] 100map1[1] 13map1[4] 56map1[8] 90fmt.Println(map1)//如果按照map的key的顺序进行排序输出//1.先将map的key放入到切片中//2.对切片排序//3.遍历切片然后按照key来输出map的值var keys []intfor k, _ : range map1 {keys append(keys, k)}//排序sort.Ints(keys)fmt.Println(keys)for _, k : range keys{fmt.Printf(map1[%v%v \n, k, map1[k])}
}/*
map[1:13 4:56 8:90 10:100]
[1 4 8 10]
map1[113
map1[456
map1[890
map1[10100
*/
map的使用细节
1.map是引用类型遵守引用类型传递的机制在一个函数接受map修改后会直接修改原来的map2.map的容量达到后再想map增加元素会自动扩容并不会发生panic也就是说map能动态的增长键值对3.map的value也经常使用struct类型(比前面value是一个map更好)比如value为Student结构体