自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇文章帶你了解Go語(yǔ)言基礎(chǔ)之Map

開發(fā) 后端
在上述的多個(gè)文章中,我們學(xué)習(xí)了數(shù)據(jù)類型,數(shù)組,切片等幫助我們存儲(chǔ)數(shù)據(jù)。尤其是是切片,可以存儲(chǔ)多個(gè)東西,并且可以靈活的增刪改查。

[[350553]]

 回憶往事

在上述的多個(gè)文章中,我們學(xué)習(xí)了數(shù)據(jù)類型,數(shù)組,切片等幫助我們存儲(chǔ)數(shù)據(jù)。

尤其是是切片,可以存儲(chǔ)多個(gè)東西,并且可以靈活的增刪改查。

但是切片仍然有不太方便的地方。

比如學(xué)生,一個(gè)學(xué)生的信息是多個(gè)的,例如姓名,身高,體重,年齡等。

如果使用切片,我們可能是這樣存儲(chǔ)的。

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     //學(xué)生1 
  7.     var stu1 = []string{"張三", "188", "70KG", "18"
  8.     //學(xué)生2 
  9.     var stu2 = []string{"李四", "170", "66KG", "17"
  10.     fmt.Println(stu1) 
  11.     fmt.Println(stu2) 

如果按照目前所接受的知識(shí),只能到這了,我也只能想到這。

但是會(huì)有一個(gè)明顯的缺點(diǎn),就是我們需要通過(guò)下標(biāo)取值或者修改值。

并且我們還得數(shù)一下想修改的值的下標(biāo)在哪個(gè)位置,相對(duì)來(lái)說(shuō),不是那么方便。

引入map

map,在Python中叫字典,Java中也叫map,PHP中好像列表就帶有map的功能。

map是鍵值對(duì)(key-value)存儲(chǔ)結(jié)構(gòu),是無(wú)序的,內(nèi)部使用哈希(hash)實(shí)現(xiàn),性能很高。

在Go中,map是引用類型,內(nèi)存圖如下。

map基本使用

map語(yǔ)法

  1. 方式一,聲明時(shí)賦值 
  2. var 變量名 = map[key類型][value類型]{ 
  3.     key:value, 
  4.     key:value,//必須使用,結(jié)尾,否則會(huì)報(bào)錯(cuò) 
  5. //方式二,make方式 
  6. var 變量名 = make(map[key類型]value類型, 容量(cap)) 
  7. //如果map是make方式聲明的,第二個(gè)參數(shù)直接就是容量,元素個(gè)數(shù)是0,沒(méi)有第三個(gè)參數(shù) 

示例

方式一,聲明時(shí)賦值

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var stu1 = map[string]string{ 
  7.         "Name":   "張三", 
  8.         "Age":    "18", 
  9.         "height""188", //每行都要以,結(jié)尾, 
  10.     var stu2 = map[string]string{ 
  11.         "Name":   "李四", 
  12.         "Age":    "20", 
  13.         "height""170", //每行都要以,結(jié)尾, 
  14.     fmt.Println(stu1, stu2)  
  15.     //map[Age:18 Name:張三 height:188] map[Age:20 Name:李四 height:170] 

方式二,make方式

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var stu1 = make(map[string]string,10) 
  7.     stu1["Name"] = "張三" 
  8.     stu1["Age"] = "18" 
  9.     stu1["height"] = "188" 
  10.  
  11.     var stu2 = make(map[string]string,10) 
  12.     stu2["Name"] = "李四" 
  13.     stu2["Age"] = "20" 
  14.     stu2["height"] = "170" 
  15.     fmt.Println(stu1,stu2) 
  16.     //map[Age:18 Name:張三 height:188] map[Age:20 Name:李四 height:170] 

ps:關(guān)于這兩種方式,哪個(gè)使用的多。

我的建議是,如果確定有多少個(gè)字段,就使用第一種,如果不確定多少個(gè)字段,是動(dòng)態(tài)添加的,用第二種。

使用第二種要大概估算好容量,超過(guò)會(huì)觸發(fā)自動(dòng)擴(kuò)容機(jī)制,可能會(huì)產(chǎn)生那么一絲絲的性能影響。

遍歷map(查)

遍歷map,通常只用一種方式for range。

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var stu1 = make(map[string]string, 10) 
  7.     stu1["Name"] = "張三" 
  8.     stu1["Age"] = "18" 
  9.     stu1["height"] = "188" 
  10.  
  11.     for key, value := range stu1 { 
  12.         //map遍歷時(shí),key值鍵,value是值 
  13.         fmt.Println(key, value) 
  14.   } 

只遍歷key

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var stu1 = make(map[string]string, 10) 
  7.     stu1["Name"] = "張三" 
  8.     stu1["Age"] = "18" 
  9.     stu1["height"] = "188" 
  10.  
  11.     for key := range stu1 { 
  12.         //只遍歷key 
  13.         fmt.Println(key
  14.   } 

修改map的值(改)

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     //var stu1 = make(map[string]string, 10) 
  7.     //stu1["Name"] = "張三" 
  8.     //stu1["Age"] = "18" 
  9.     //stu1["height"] = "188" 
  10.     // 
  11.     //stu1["Name"] = "張三666"//修改 
  12.     //fmt.Println(stu1) 
  13.  
  14.     //同上 
  15.     var stu1 = map[string]string{ 
  16.         "Name":   "張三", 
  17.         "Age":    "18", 
  18.         "height""188", //每行都要以,結(jié)尾, 
  19.     stu1["Name"] = "張三666"//修改 
  20.     fmt.Println(stu1) 

刪除map里面的值

刪除map里面的值需要用到delete。

代碼

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.  
  7.     var stu1 = map[string]string{ 
  8.         "Name":   "張三", 
  9.         "Age":    "18", 
  10.         "height""188", //每行都要以,結(jié)尾, 
  11.     fmt.Println(stu1)    //map[Age:18 Name:張三 height:188] 
  12.     delete(stu1, "Name") //刪除key以及key對(duì)應(yīng)的值 
  13.     fmt.Println(stu1)    //map[Age:18 height:188] 

map取值注意事項(xiàng)

map在取值時(shí),盡可能的判斷一下是否key存在

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.  
  7.   var stu1 = map[string]string{ 
  8.     "Name":   "張三", 
  9.     "Age":    "18", 
  10.     "height""188", //每行都要以,結(jié)尾, 
  11.   } 
  12.   //result := stu1["Name"]//key存在,沒(méi)問(wèn)題 
  13.   //fmt.Println(result)//張三 
  14.   //result := stu1["Names"]//手一抖,key打錯(cuò)了 
  15.   //fmt.Println(result)//結(jié)果為空,顯然不是太友好 
  16.  
  17.   //取值標(biāo)準(zhǔn)用法 
  18.   result, ok := stu1["Name"
  19.   //如果key存在,ok為true,如果key不存在,ok為false 
  20.   fmt.Println(result,ok)//張三 true 
  21.   if ok { 
  22.     fmt.Println(result) 
  23.   } else { 
  24.     fmt.Println("key不存在"
  25.   } 

總結(jié)

上述我們學(xué)習(xí)了Go基礎(chǔ)之map。如果在操作過(guò)程中有任何問(wèn)題,記得下面討論區(qū)留言,我們看到會(huì)第一時(shí)間解決問(wèn)題。

我是碼農(nóng)星期八,如果覺得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈,感謝你的觀看。

本文轉(zhuǎn)載自微信公眾號(hào)「 Go語(yǔ)言進(jìn)階學(xué)習(xí)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 Go語(yǔ)言進(jìn)階學(xué)習(xí)公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Go語(yǔ)言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2022-02-16 10:03:06

對(duì)象接口代碼

2020-10-22 08:33:22

Go語(yǔ)言

2020-11-11 10:52:54

Go語(yǔ)言C語(yǔ)言

2022-04-27 10:01:43

切片Go封裝

2020-12-30 09:04:32

Go語(yǔ)言TCPUDP

2020-10-25 07:33:13

Go語(yǔ)言

2020-12-09 09:59:32

Go語(yǔ)言技術(shù)

2020-10-23 08:38:19

Go語(yǔ)言

2021-10-09 07:10:31

Go語(yǔ)言基礎(chǔ)

2020-12-27 10:15:44

Go語(yǔ)言channel管道

2020-12-07 05:59:02

語(yǔ)言Go接口

2021-10-30 10:43:04

語(yǔ)言Go函數(shù)

2021-11-03 10:02:07

Go基礎(chǔ)函數(shù)

2021-09-29 10:00:07

Go語(yǔ)言基礎(chǔ)

2021-10-13 10:00:52

Go語(yǔ)言基礎(chǔ)

2020-10-22 11:15:47

Go語(yǔ)言變量

2021-10-16 10:17:51

Go語(yǔ)言數(shù)據(jù)類型

2020-12-23 08:39:11

Go語(yǔ)言基礎(chǔ)技術(shù)

2021-02-20 10:06:14

語(yǔ)言文件操作

2021-01-13 08:40:04

Go語(yǔ)言文件操作
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)