Go语言Map数据类型
文章目录 Go语言Map数据类型 一、Map 1.1.1、map定义 1.1.2、map的基本使用 1.1.3、判断某个键是否存在 1.1.4、map的遍历 1.1.5、使用delete()函数删除键值对 1.1.6、按照指定顺序遍历map 1.1.7、元素为map类型的切片 1.1.8、值为切片类型的map
一、Map
map是一种无序的基本key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
1.1.1、map定义
map[ keytype] valuetype
keytype: 表示键的类型
valuetype: 表示值的类型
map类型的变量默认初始值为nil,需要使用make()来分配内存。 语法如下
make( map[ keytype] valuetype, [ cap] )
其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其执行一个合适的容量。
1.1.2、map的基本使用
map中的数据都是成对出现的,map的基本使用示例代码如下:
func main ( ) { scoreMap := make ( map [ string ] int , 8 ) scoreMap[ "张三" ] = 90 scoreMap[ "小明" ] = 100 fmt. Println ( scoreMap) fmt. Println ( scoreMap[ "小明" ] ) fmt. Printf ( "tyoe of a:%T\n" , scoreMap) }
map[ 小明:100 张三:90]
100
tyoe of a:map[ string] int
func main ( ) { userInfo := map [ string ] string { "username" : "admin" , "password" : "admin@123" , } fmt. Println ( userInfo) fmt. Println ( userInfo[ "username" ] ) fmt. Println ( userInfo[ "password" ] ) }
1.1.3、判断某个键是否存在
Go语言中有个判断map中键是否存在的特俗写法,格式如下:
value, ok := map[ key]
func main ( ) { userInfo := map [ string ] string { "username" : "admin" , "password" : "admin@123" , } v, ok := userInfo[ "username" ] if ok { fmt. Println ( v) } else { fmt. Println ( "查无此人" ) } }
1.1.4、map的遍历
func main ( ) { scoremap := make ( map [ string ] int ) scoremap[ "张三" ] = 90 scoremap[ "小明" ] = 100 scoremap[ "王五" ] = 60 for k, v := range scoremap { fmt. Printf ( "key: %s value: %d\n" , k, v) } }
func main ( ) { scoremap := make ( map [ string ] int ) scoremap[ "张三" ] = 90 scoremap[ "小明" ] = 100 scoremap[ "王五" ] = 60 for k := range scoremap { fmt. Printf ( k) } }
注意:遍历map时的元素顺序与添加键值对的顺序毫无关系
1.1.5、使用delete()函数删除键值对
使用delete()内建函数从map中删除一组键值对,delete()函数的格式如下:
delete( map, key)
map: 表示要删除键值对的map
key: 表示要删除的键值对的key
func main ( ) { scoremap := make ( map [ string ] int ) scoremap[ "张三" ] = 90 scoremap[ "小明" ] = 100 scoremap[ "王五" ] = 60 delete ( scoremap, "小明" ) for k, v := range scoremap { fmt. Printf ( k, v) } }
1.1.6、按照指定顺序遍历map
func main ( ) { rand. Seed ( time. Now ( ) . UnixNano ( ) ) var scoreMap = make ( map [ string ] int , 200 ) for i := 0 ; i < 100 ; i++ { key := fmt. Sprintf ( "stu%02d" , i) value := rand. Intn ( 100 ) scoreMap[ key] = value} var keys = make ( [ ] string , 0 , 200 ) for key := range scoreMap { keys = append ( keys, key) } sort. Strings ( keys) for _ , key := range keys { fmt. Println ( key, scoreMap[ key] ) } }
1.1.7、元素为map类型的切片
func main ( ) { var mapSlice = make ( [ ] map [ string ] string , 3 ) for index, value := range mapSlice { fmt. Printf ( "index: %d value: %v\n" , index, value) } fmt. Println ( "init data" ) mapSlice[ 0 ] = make ( map [ string ] string , 10 ) mapSlice[ 0 ] [ "name" ] = "王五" mapSlice[ 0 ] [ "password" ] = "123456" mapSlice[ 0 ] [ "address" ] = "红旗大街" for index, value := range mapSlice { fmt. Printf ( "index: %d value: %v\n" , index, value) } }
1.1.8、值为切片类型的map
func main ( ) { var sliceMap = make ( map [ string ] [ ] string , 3 ) fmt. Println ( sliceMap) fmt. Println ( "init data" ) key := "中国" value, ok := sliceMap[ key] if ! ok { value = make ( [ ] string , 0 , 2 ) } value = append ( value, "北京" , "上海" ) sliceMap[ key] = valuefmt. Println ( sliceMap)
}