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)
}