欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言中map集合的具體使用

 更新時(shí)間:2023年02月17日 11:19:06   作者:量化Mike  
本文主要介紹了Go語(yǔ)言中map集合的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Go 語(yǔ)言提供了內(nèi)置類型 map集合,它將一個(gè)值與一個(gè)鍵關(guān)聯(lián)起來(lái),可以使用相應(yīng)的鍵檢索值。

  • map是一種集合,可以像遍歷數(shù)組或切片那樣去遍歷它。因?yàn)閙ap是由Hash表實(shí)現(xiàn)的,所以對(duì)map的讀取順序不固定。
  • map是無(wú)序的,每次打印出來(lái)的map都會(huì)不一樣,它不能通過(guò)index獲取,而必須通過(guò)key獲取。
  • map的長(zhǎng)度是不固定的,和切片一樣可以擴(kuò)展。

內(nèi)置的len()函數(shù)同樣適用于map,返回map擁有的鍵值對(duì)的數(shù)量。但是map不能通過(guò)cap()函數(shù)計(jì)算容量(或者說(shuō)cap()函數(shù)的參數(shù)不可以是map)。

同一個(gè)map中key必須保證唯一。key的數(shù)據(jù)類型必須是可參與比較運(yùn)算的類型,也就是支持==或!=操作的類型,如布爾型、整型、浮點(diǎn)型、字符串、數(shù)組。切片、函數(shù)等引用類型則不能作為key的數(shù)據(jù)類型。

map的value可以是任何數(shù)據(jù)類型。map和切片一樣,也是一種引用類型。

1-1 定義

map聲明

  • 使用make()函數(shù):變量名 := make(map[key類型]value類型)
    • 該聲明方式,如果不初始化map,map也不等于nil。
  • 使用var關(guān)鍵字定義map:var 變量名 map[key類型] value類型
    • 使用var關(guān)鍵字聲明map,未初始化的map的默認(rèn)值是nil。
    • nil map不能存放鍵值對(duì)。
    • 如果要使用map存儲(chǔ)鍵值對(duì),必須在聲明時(shí)初始化,或者使用make()函數(shù)分配到內(nèi)存空間。

1-2 map遍歷

map的初始化賦值和遍歷

package main

import "fmt"

func main() {
?? ?//1、聲明時(shí)同時(shí)初始化
?? ?var country = map[string]string{
?? ??? ?"China": ?"Beijing",
?? ??? ?"Japan": ?"Tokyo",
?? ??? ?"India": ?"New Delhi",
?? ??? ?"France": "Paris",
?? ??? ?"Italy": ?"Rome",
?? ?}
?? ?fmt.Println(country)

?? ?// 短變量聲明初始化方式
?? ?rating := map[string]float64{"c": 5, "Go": 4.5, "Python": 4.5, "C++": 3}
?? ?fmt.Println(rating)

?? ?//2、創(chuàng)建map后再賦值
?? ?countryMap := make(map[string]string)
?? ?countryMap["China"] = "Beijing"
?? ?countryMap["Japan"] = "Tokyo"
?? ?countryMap["India"] = "New Delhi"
?? ?countryMap["France"] = "Paris"
?? ?countryMap["Italy"] = "Rome"

?? ?//3、遍歷map(無(wú)序)
?? ?//(1)、key 、value都遍歷
?? ?for k, v := range countryMap {
?? ??? ?fmt.Println("國(guó)家", k, "首都", v)
?? ?}
?? ?fmt.Println("-----------")

?? ?//(2)、只展示value
?? ?for _, v := range countryMap {
?? ??? ?fmt.Println("國(guó)家", "首都", v)
?? ?}
?? ?fmt.Println("-----------")

?? ?//(3)、只展示key
?? ?for k := range countryMap {
?? ??? ?fmt.Println("國(guó)家", k, "首都", countryMap[k])
?? ?}
}

查看元素在集合中是否存在

  • 可以通過(guò)key獲取map中對(duì)應(yīng)的value值。語(yǔ)法為:map[key]。
  • 當(dāng)key不存在時(shí),會(huì)得到該value值類型的默認(rèn)值,比如string類型得到空字符串,int類型得到0,程序不會(huì)報(bào)錯(cuò)。
  • 可以通過(guò)value, ok := map[key]獲知key/value是否存在。ok是bool型,如果ok是true,則該鍵值對(duì)存在,否則不存在。
package main

import "fmt"

func main() {
?? ?countryMap := make(map[string]string)
?? ?countryMap["China"] = "Beijing"
?? ?countryMap["Japan"] = "Tokyo"
?? ?countryMap["India"] = "New Delhi"
?? ?countryMap["France"] = "Paris"
?? ?countryMap["Italy"] = "Rome"

?? ?//查看元素是否在map中存在
?? ?value, ok := countryMap["England"]
?? ?fmt.Printf("%q \n", value)
?? ?fmt.Printf("%T , %v \n", ok, ok)
?? ?if ok {
?? ??? ?fmt.Println("首都:", value)
?? ?} else {
?? ??? ?fmt.Println("首都信息未檢索到!")
?? ?}

?? ?//或者
?? ?if value, ok := countryMap["USA"]; ok {
?? ??? ?fmt.Println("首都:", value)
?? ?} else {
?? ??? ?fmt.Println("首都信息未檢索到!")
?? ?}
}

1-3 map集合刪除

delete(map, key) 函數(shù)用于刪除集合的某個(gè)元素,參數(shù)為map和其對(duì)應(yīng)的key。刪除函數(shù)不返回任何值。

Go語(yǔ)言沒(méi)有為map提供清空所有元素的函數(shù),清空map的唯一辦法是重新make一個(gè)新的map。不用擔(dān)心垃圾回收的效率,Go語(yǔ)言的垃圾回收比寫一個(gè)清空函數(shù)更高效。

package main

import "fmt"

func main() {
?? ?//1、聲明并初始化一個(gè)map
?? ?map1 := map[string]string{
?? ??? ?"element": ? ?"div",
?? ??? ?"width": ? ? ?"100px",
?? ??? ?"height": ? ? "200px",
?? ??? ?"border": ? ? "solid",
?? ??? ?"background": "none",
?? ?}

?? ?//2、根據(jù)key刪除map中的某個(gè)元素
?? ?fmt.Println("刪除前:", map1)
?? ?if _, ok := map1["background"]; ok {
?? ??? ?delete(map1, "background")
?? ?}
?? ?fmt.Println("刪除后:", map1)

?? ?//3、清空map
?? ?//map1 = map[string]string{}
?? ?map1 = make(map[string]string)
?? ?fmt.Println("清空后:", map1)
}

1-4 map是引用類型

map與切片相似,都是引用類型。將一個(gè)map賦值給一個(gè)新的變量時(shí),它們指向同一塊內(nèi)存(底層數(shù)據(jù)結(jié)構(gòu))。修改兩個(gè)變量的內(nèi)容都能夠引起它們所指向的數(shù)據(jù)發(fā)生變化。

package main

import "fmt"

func main() {
?? ?personSalary := map[string]int{
?? ??? ?"Steven": 18000,
?? ??? ?"Daniel": 5000,
?? ??? ?"Josh": ? 20000,
?? ?}
?? ?fmt.Println("原始薪資:", personSalary)
?? ?newPersonSalary := personSalary
?? ?newPersonSalary["Daniel"] = 8000
?? ?fmt.Println("修改后newPersonSalary:", newPersonSalary)
?? ?fmt.Println("personSalary受影響情況:", personSalary)
}

雖然就底層而言,所有的數(shù)據(jù)都是由比特組成,但計(jì)算機(jī)一般操作的是固定大小的數(shù),如整型、浮點(diǎn)型、布爾型、字符串、字符(byte、rune)等。進(jìn)一步將這些數(shù)組織在一起,就可表達(dá)更多的對(duì)象。

Go語(yǔ)言提供了豐富的數(shù)據(jù)組織形式,這依賴于Go語(yǔ)言內(nèi)置的數(shù)據(jù)類型。這些內(nèi)置的數(shù)據(jù)類型,如函數(shù)與指針、數(shù)組、切片、map等,兼顧了硬件的特性和表達(dá)復(fù)雜數(shù)據(jù)結(jié)構(gòu)的便捷性。

到此這篇關(guān)于Go語(yǔ)言中map集合的具體使用的文章就介紹到這了,更多相關(guān)Go語(yǔ)言中map集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中for range的取地址操作陷阱介紹

    golang中for range的取地址操作陷阱介紹

    這篇文章主要介紹了golang中for range的取地址操作陷阱,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • GO中什么情況會(huì)使用變量逃逸

    GO中什么情況會(huì)使用變量逃逸

    本文主要介紹了GO中什么情況會(huì)使用變量逃逸,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • go語(yǔ)言之給定英語(yǔ)文章統(tǒng)計(jì)單詞數(shù)量(go語(yǔ)言小練習(xí))

    go語(yǔ)言之給定英語(yǔ)文章統(tǒng)計(jì)單詞數(shù)量(go語(yǔ)言小練習(xí))

    這篇文章給大家分享go語(yǔ)言小練習(xí)給定英語(yǔ)文章統(tǒng)計(jì)單詞數(shù)量,實(shí)現(xiàn)思路大概是利用go語(yǔ)言的map類型,以每個(gè)單詞作為關(guān)鍵字存儲(chǔ)數(shù)量信息,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2020-01-01
  • GO語(yǔ)言(golang)基礎(chǔ)知識(shí)

    GO語(yǔ)言(golang)基礎(chǔ)知識(shí)

    這篇文章主要介紹了GO語(yǔ)言(golang)基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-01-01
  • Go語(yǔ)言的變量、函數(shù)、Socks5代理服務(wù)器示例詳解

    Go語(yǔ)言的變量、函數(shù)、Socks5代理服務(wù)器示例詳解

    這篇文章主要介紹了Go語(yǔ)言的變量、函數(shù)、Socks5代理服務(wù)器的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • ???????Golang實(shí)現(xiàn)RabbitMQ中死信隊(duì)列幾種情況

    ???????Golang實(shí)現(xiàn)RabbitMQ中死信隊(duì)列幾種情況

    本文主要介紹了???????Golang實(shí)現(xiàn)RabbitMQ中死信隊(duì)列幾種情況,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)步驟

    Go數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)步驟

    本文主要介紹了Go數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Go語(yǔ)言常見錯(cuò)誤之濫用getters/setters誤區(qū)實(shí)例探究

    Go語(yǔ)言常見錯(cuò)誤之濫用getters/setters誤區(qū)實(shí)例探究

    在Go語(yǔ)言編程中,恰如其分地使用getters和setters是至關(guān)重要的,過(guò)度和不適當(dāng)?shù)厥褂盟鼈兛赡軐?dǎo)致代碼冗余、可讀性差和封裝不當(dāng),在本文中,我們將深入探討如何識(shí)別濫用getter和setter的情況,以及如何采取最佳實(shí)踐來(lái)避免這些常見的Go錯(cuò)誤
    2024-01-01
  • Go語(yǔ)言CSP并發(fā)模型實(shí)現(xiàn)MPG

    Go語(yǔ)言CSP并發(fā)模型實(shí)現(xiàn)MPG

    這篇文章主要為大家介紹了Go語(yǔ)言CSP并發(fā)模型實(shí)現(xiàn)MPG圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 一文帶你深入理解Golang Context包

    一文帶你深入理解Golang Context包

    在 Go 語(yǔ)言中,Context 包是一種非常常用的工具,它被用來(lái)管理 goroutine 之間的通信和取消。本文將深入探討Context 包的基本原理,包括使用場(chǎng)景、原理和一些最佳實(shí)踐,需要的可以參考下
    2023-05-05

最新評(píng)論