6.Go语言基础之map
Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化后才能使用。
1.2map定义
map定义语法如下:map[KeyType]ValueType其中,KeyType表示键的类型。ValueType表示键对应的值的类型。map类型的变量,默认初始值为nil,需要使用make()函数来分配内存。语法为:make(map[KeyType]ValueType, [cap])其中cap表示map的容量,该参数虽然不是必须的,但是我们需要在初始化map的时候为其指定一个合适的容量。
1.3map的基本使用
package mainimport "fmt"func main() { scoreMap := make(map[string]int, 8) scoreMap["张三"]=90 scoreMap["李四"]=100 fmt.Println(scoreMap) //map[张三:90 李四:100] fmt.Println(scoreMap["张三"]) //90 fmt.Printf("type of a:%T\n",scoreMap) //type of a:map[string]int}
package mainimport "fmt"func main() { userInfo := map[string]string{ "name":"张三", "passed":"12345", } fmt.Println(userInfo)}结果:map[name:张三 passed:12345]
1.4判断某个键是否存在
Go语言中判断map中某个键是否存在的特殊写法:value,ok:=map[key]package mainimport "fmt"func main() { userInfo := map[string]string{ "name":"张三", "passed":"12345", } v,ok :=userInfo["name"] if ok{ fmt.Println(v) }else{ fmt.Println("查无此人") }}结果:张三
1.5map的遍历
package mainimport "fmt"func main() { scoreMap :=make(map[string]int) scoreMap["张三"]=90 scoreMap["李四"]=100 for k,v :=range scoreMap{ fmt.Println(k,v) } //可以只遍历key for k :=range scoreMap{ fmt.Println(k) }}结果:李四 100张三 90张三李四注意:遍历map时,元素顺序与添加键值对的顺序无关。
1.6使用delete()函数删除键值对
使用delete()内建函数从map中删除键值对,delete()函数的格式如下:delete(map,key)其中,map表示要删除键值对的mapkey表示要删除的键package mainimport "fmt"func main() { scoreMap :=make(map[string]int) scoreMap["张三"]=90 scoreMap["李四"]=100 delete(scoreMap,"张三") for k,v :=range scoreMap{ fmt.Println(k,v) }}结果:李四 100
1.7按照指定顺序遍历map
package mainimport ( "fmt" "math/rand" "sort" "time")func main() { rand.Seed(time.Now().UnixNano())//初始化随机数种子 var scoreMap = make(map[string]int,200) for i:=0;i<10;i++{ key := fmt.Sprintf("stu%02d",i)//生成stu开头的字符串 value := rand.Intn(100)//生成0-99的随机整数 scoreMap[key]=value } fmt.Println(scoreMap) //取出map中所有的key,存入切片keys var keys =make([]string,0,200) for key :=range scoreMap{ keys=append(keys,key) } sort.Strings(keys) for _,value :=range keys{ fmt.Println(scoreMap[value]) }}结果:map[stu00:6 stu01:77 stu02:27 stu03:98 stu04:78 stu05:90 stu06:23 stu07:99 stu08:35 stu09:72]6772798789023993572
1.8元素为map类型的切片
package mainimport "fmt"func main() { var mapSlice = make([]map[string]string, 3) for index, value := range mapSlice { fmt.Printf("index:%d value:%v\n", index, value) } mapSlice[0] = make(map[string]string, 10) mapSlice[0]["name"] = "张三" mapSlice[0]["passwd"] = "123" for index, value := range mapSlice { fmt.Printf("index:%d value:%v\n", index, value) }}结果:index:0 value:map[]index:1 value:map[]index:2 value:map[]index:0 value:map[name:张三 passwd:123]index:1 value:map[]index:2 value:map[]
1.9值为切片类型的map
package mainimport "fmt"func main() { var sliceMap = make(map[string][]string,3) fmt.Println(sliceMap) //map[] key := "中国" value,ok :=sliceMap[key] if !ok{ value=make([]string,3) } value=append(value,"北京","上海") sliceMap[key]=value fmt.Println(sliceMap)//map[中国:[ 北京 上海]]}
2.练习
写一个程序,统计一个字符串中每个单词出现的次数。比如:”how do you do”中how=1 do=2 you=1。package mainimport ( "fmt" "strings")func main() { var str = "how do you do" var mymap = make(map[string]int) li :=strings.Split(str," ") for _,key := range li{ _,ok:=mymap[key] if !ok{ mymap[key]=1 }else{ mymap[key]+=1 } } fmt.Println(mymap)}结果:map[do:2 how:1 you:1]
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。