GO语言学习笔记——map_2
map的小用法记录:
1、factory
go中map的value可以是一个匿名函数,因而利用这一点可以简单实现工厂模式
factory:=make(map[int]func(a int,b int)int,3)
factory[1]= func(a int, b int)int {
return a+b
}
factory[2]= func(a int, b int)int {
return a*a*a-b*b*b
}
factory[3]= func(a int, b int)int {
return int(math.Floor(float64(a)/float64(b)+0.5))
}
a,b:=77,88
println("a与b的和为:",factory[1](a,b))
println("a的三次方与b的三次方的差为:",factory[2](a,b))
println("a除以b的值为:",factory[3](a,b))//四舍五入了,巧妙得运用了math库的Floor
输出:
a与b的和为: 165
a的三次方与b的三次方的差为: -224939
a除以b的值为: 1
2、set
go中不像python有set,但是set还是比较重要的,尤其是在去重上的应用,map可以实现简单的set
func exists(set map[string]bool,item string) {
if(set[item]){
println(item,"存在")
}else {
println(item,"不存在")
}//判断是否存在的函数
set1:=map[string]bool{}
set2:=map[string]bool{}
set1["python"]=true
exists(set1,"python")
exists(set1,"golang")
list:=[...]string{"python","golang","python"}
list1:=[]string{}
for _,value:=range list{
set2[value]=true
}
for key:=range set2{
list1=append(list1,key)
}
fmt.Println(list1)
上面代码实现了数组去重,用新的切片list1返回去重后的list
输出:
python 存在
golang 不存在
[python golang]