Golang基础-5
map
又叫映射(map),go语言中内置的一种类型,同样也是键值对关联
基本语法
var map变量名 map[keyType]valueType
注意key的数据类型不能是slice,map,function,
一般是int,string类型
value的数据类型一般是数字(整数,浮点),string,map,结构体
如果只定义map,内存是不会分配其空间的
必须通过make函数进行初始化,才会分配空间
func main(){
// 定义map变量,如果只定义,内存是不会分配其空间的
// 必须通过make函数进行初始化,才会分配空间
var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
a[190503] = "王五"
a[190504] = "王五"
// 输出集合
fmt.Println(a)
}
通过以上例子看出map的特点:
1.map集合在使用时一定要用make函数分配空间
2.map的key-value是无序的(你怎样存入顺序就咋样,不会排序)
3.key不能重复,如果重复,后面的value将会覆盖前面的value(相当于重新赋值),value是可以重复的
创建方式
var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
2.这种方式可以不指定map的长度
b:=make(map[int]string)
3.直接定义的时候初始化,每个后面都必须加‘ , ’
c := map[int]string{
190501 : "张三",
190502 :"李四",
}
操作
增加&修改
var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 增加存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
//修改
a[190503] = "王五"
// 输出集合
fmt.Println(a)
删除
通过内置函数delete()
func main(){
// 定义map变量,如果只定义,内存是不会分配其空间的
// 必须通过make函数进行初始化,才会分配空间
var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
a[190503] = "王五"
a[190504] = "王五"
delete(a,190504)
// 输出集合
fmt.Println(a)
}
清空
go语言不像其他语言提供了清空的函数,要想清空一个map有两种方式
1.遍历map,逐个删除
2.map=make()make一个新的,让原来的称为垃圾,被gc回收
查找
value为对应key的value,bool为是否返回(有对应key返回true,没有为false)
value,bool=map[key]
获取长度
var m map[int]string
m=make(map[int]string,10)
l=len(m)
遍历
只支持for range遍历
var a map[int]string
a=make(map[int]string,10)//可以存放10个键值对
// 存入键值对
a[190501] = "张三"
a[190502] = "李四"
a[190503] = "王s"
a[190503] = "王五"
a[190504] = "王五"
delete(a,190504)
// 输出集合
for k,v:=range a{
fmt.Printf("a[%v]:%v\n",k,v)
}
当value的类型是map型的时候
b:=make(map[string]map[int]string)
// 赋值
b["1班"] = make(map[int]string,3)
b["1班"][1905101] = "小张"
b["1班"][1905103] = "小郭"
b["1班"][1905102] = "小王"
b["2班"] = make(map[int]string,3)
b["2班"][1905201] = "张三"
b["2班"][1905203] = "郭龙"
b["2班"][1905202] = "王菲"
for clas,s :=range b{
fmt.Println("班级:",clas)
for k,v:=range s{
fmt.Printf("学号:%v\t姓名:%v\n",k,v)
}
}
面向对象
结构体
具体对象:
一位学生:名字,年龄,性别,学号
在java中直接封装成一个学生类,但是go语言中没有类,只能通过结构体实现封装
结构体中可以参照java类有属性和特定的行为(方法)
实例创建
方式一:
type Student struct{
// 变量名字大写外界可以访问
Name string
Age int
Id int
Sex string
}
func main(){
//创建学生结构体的实例
var w Student
// 在未赋值时会给初始值给每个属性
fmt.Println(w)
w.Name="汪洋"
fmt.Println(w)
}
方式2:
var w Student=Student{}
w.Name="汪洋"
w.Age=21
//
var w Student=Student{"汪洋",21,1905300111,"男"}
方式三;
var s *Student=new(Student)
//s是指针类型的,实际指向的是一个个地址,应该给这个地址所存的对象进行赋值操作
(*s).Name = "张三"
//go对这种方式提供了简化的赋值方式,下面这样也是可以的
s.Age = 21
方式四:
var s *Student=&Student{}
(*s).Name = "张三"
//go对这种方式提供了简化的赋值方式,下面这样也是可以的
s.Age = 21
结构体之间的转化
前提:
转换时需要完全相同的字段名即里面的属性方法都要相同(名字,个数,类型)
标签:map,string,int,make,基础,Golang,键值,var From: https://www.cnblogs.com/qwerty-wy/p/16662940.html