6.Go语言基础之map-创新互联

1.map

1.1map介绍

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 main

import "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 main

import "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 main

import "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 main

import "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表示要删除键值对的map
key表示要删除的键

package main

import "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 main

import (
    "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]
6
77
27
98
78
90
23
99
35
72

1.8元素为map类型的切片

package main

import "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 main

import "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 main

import (
    "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]

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

成都创新互联公司服务项目包括宿松网站建设、宿松网站制作、宿松网页制作以及宿松网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,宿松网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到宿松省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
分享文章:6.Go语言基础之map-创新互联
标题链接:http://scyanting.com/article/dcejic.html