Hey,大家好呀,我是星期八,這次咱們繼續學習Go基礎之map扒。
在上述的多篇文章中,我們學習了資料型別,切片
等幫助我們儲存資料。
尤其是切片,可以儲存多個東西,並且可以靈活的增刪改查。
但切片還是有不太方便的地方。 例如學生,一個學生的資訊是多個的,例如名稱,
#身高
,#1
package main import "fmt" func main() { //学生1 var stu1 = []string{"张三", "188", "70KG", "18"} //学生2 var stu2 = []string{"李四", "170", "66KG", "17"} fmt.Println(stu1) fmt.Println(stu2) }#########如果按照目前所接受的知識,只能到這了,我也只能想到這一點。 ##########
但是會有一個明顯的缺點,就是我們需要透過下標取值##或修改值。
而且我們還得數一下想修改的值的下標在哪個位置,相對來說,不是那麼方便。
map,在Python中叫字典,Java中也叫map,PHP好像列表就帶有map的功能。
map是鍵值對(key-value)。儲存結構,是 無序的,內部使用哈希(hash)實現,性能很高。
在Go中,map是引用#類型,記憶體圖如下。
#
方式一,声明时赋值 var 变量名 = map[key类型][value类型]{ key:value, key:value,//必须使用,结尾,否则会报错 } //方式二,make方式 var 变量名 = make(map[key类型]value类型, 容量(cap)) //如果map是make方式声明的,第二个参数直接就是容量,元素个数是0,没有第三个参数
代码
package main import "fmt" func main() { var stu1 = map[string]string{ "Name": "张三", "Age": "18", "height": "188", //每行都要以,结尾, } var stu2 = map[string]string{ "Name": "李四", "Age": "20", "height": "170", //每行都要以,结尾, } fmt.Println(stu1, stu2) //map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170] }
代码
package main import "fmt" func main() { var stu1 = make(map[string]string,10) stu1["Name"] = "张三" stu1["Age"] = "18" stu1["height"] = "188" var stu2 = make(map[string]string,10) stu2["Name"] = "李四" stu2["Age"] = "20" stu2["height"] = "170" fmt.Println(stu1,stu2) //map[Age:18 Name:张三 height:188] map[Age:20 Name:李四 height:170] }
ps:关于这两种方式,哪个使用的多。
我的建议是,如果确定有多少个字段,就使用第一种,如果不确定多少个字段,是动态添加的,用第二种。
使用第二种要大概估算好容量,超过会触发自动扩容机制,可能会产生那么一丝丝的性能影响。
遍历map,通常只用一种方式for range
。
代码
package main import "fmt" func main() { var stu1 = make(map[string]string, 10) stu1["Name"] = "张三" stu1["Age"] = "18" stu1["height"] = "188" for key, value := range stu1 { //map遍历时,key值键,value是值 fmt.Println(key, value) } }
只遍历key
package main import "fmt" func main() { var stu1 = make(map[string]string, 10) stu1["Name"] = "张三" stu1["Age"] = "18" stu1["height"] = "188" for key := range stu1 { //只遍历key fmt.Println(key) } }
package main import "fmt" func main() { //var stu1 = make(map[string]string, 10) //stu1["Name"] = "张三" //stu1["Age"] = "18" //stu1["height"] = "188" // //stu1["Name"] = "张三666"//修改 //fmt.Println(stu1) //同上 var stu1 = map[string]string{ "Name": "张三", "Age": "18", "height": "188", //每行都要以,结尾, } stu1["Name"] = "张三666"//修改 fmt.Println(stu1) }
删除map里面的值需要用到delete
。
代码
package main import "fmt" func main() { var stu1 = map[string]string{ "Name": "张三", "Age": "18", "height": "188", //每行都要以,结尾, } fmt.Println(stu1) //map[Age:18 Name:张三 height:188] delete(stu1, "Name") //删除key以及key对应的值 fmt.Println(stu1) //map[Age:18 height:188] }
map在取值时,尽可能的判断一下是否key存在
package main import "fmt" func main() { var stu1 = map[string]string{ "Name": "张三", "Age": "18", "height": "188", //每行都要以,结尾, } //result := stu1["Name"]//key存在,没问题 //fmt.Println(result)//张三 //result := stu1["Names"]//手一抖,key打错了 //fmt.Println(result)//结果为空,显然不是太友好 //取值标准用法 result, ok := stu1["Name"] //如果key存在,ok为true,如果key不存在,ok为false fmt.Println(result,ok)//张三 true if ok { fmt.Println(result) } else { fmt.Println("key不存在") } }
上述我们学习了Go基础之map。如果在操作过程中有任何问题,记得下面讨论区留言,我们看到会第一时间解决问题。
以上是一篇文章帶你了解Go語言基礎之map的詳細內容。更多資訊請關注PHP中文網其他相關文章!