golang 基礎(chǔ)(16)map

square-gopher.png

Map

  • 什么是 map
  • 如何創(chuàng)建 map
  • map 的操作
    一句話概括為 map 是一種常見數(shù)據(jù)結(jié)構(gòu)奴迅,并可提供鍵值查詢能力的無序集合天梧。map 中的 key 和 value 需要是同一類型的數(shù)據(jù)步鉴。但如果 key 為接口類型可以接受多種類型作為 value。

創(chuàng)建和填充 map

m := map[string]string{
        "name":"golang basic",
        "category":"golang",
    }   
    fmt.Println(m)
map[category:golang name:golang basic]
m := map[[]int]string{}
./main.go:25:7: invalid map key type []int

slice 是不可以作為 map 的 key 來使用而數(shù)組卻可以做map 的 key 來使用仁连。

m := map[[3]int]string{}

這樣就沒有問題了满葛。

第二種創(chuàng)建 map 方式,是通過 make 來創(chuàng)建 map 這時候我們可以無需賦值琐驴。在 Go 語言中內(nèi)置的make()函數(shù)可用來創(chuàng)建 slice俘种、map 和 channel。通過 make 創(chuàng)建的 map 為一個空 map绝淡。并且會預(yù)先申請足夠的內(nèi)存宙刘,并隨著加入數(shù)據(jù)自動進行擴容。

m2 := make(map[string]int) // m2 == empty map
map[]
var m3 map[string]int // m3 == nil

這里創(chuàng)建 m2 和 m3 的形式不同但是打印都輸出 map[],其實這兩種創(chuàng)建方式創(chuàng)建出來 map 也是略有不同 m2 為 empty map 和 m3 為 nil牢酵。在 go 語言中 nil 與 java 這樣語言 null 是不同悬包,go 語言 nil 是可以參加運算的。

列出幾種創(chuàng)建 map

var a map[string][]int // key string val []int slice
var b map[string][4]int // key string val [4]int slice
var c map[[4]int]string // 將 [4]int 映射到 字符串
var d map[int]map[string]int
    tuts := map[string]int{
        "angular base": 10,
        "react base" :12,
        "vue base" : 10,
    }

我們?nèi)绾胃鶕?jù) key 獲取 map 的值呢馍乙,很簡單

fmt.Println(tuts["angular base"]) // 10

map 添加元素也相對比較簡單和直觀布近。

tuts["golang base"] = 20
    tuts["rust base"] = 30
    fmt.Println(tuts["golang base"])

map 可以作為 map 的值而不能作為 map 的 key 來使用

map[] map[] map[] map[]

map 的 key

  • map 使用hashmap 必須可以比較相等
  • 除了 slice, map, function 的內(nèi)建類型都可以作為 key
  • struct 類型不包含上述字段垫释,也可以作為key

遍歷 map

for k, v := range m{
    fmt.Println(k,v)
}

這里 map 是 hashMap 所有 key 是無序,每一次輸出key順序是不一樣

根據(jù) key 獲取 value

tutName := m["name"]

如果將 key 輸入錯誤吊输,會返回一空值

categoryName  := m["cate"]

那么如何判斷字符串是否存在饶号,通過 m[key] 返回第二個參數(shù)來判斷是否存在 key 值

tutName,ok := m["name"]
fmt.Println(tutName,ok)
categoryName,ok  := m["cate"]
fmt.Println(categoryName,ok)

如果第二個參數(shù) true 表示該 key 是存在 map 中,

golang basic true
 false

map 在函數(shù)中是作為引用來使用

func foo(a map[string]int){
    a["Alex"] = 9
}


x := make(map[string]int)
    // x["Alex"] = 9
    foo(x)
    y := x["Alex"]
    fmt.Println(y) //9

獲取 map 的長度

fmt.Println(len(tuts))

map 中刪除屬性

可以用 delete 函數(shù)來刪除 map 的一個 key季蚂,我們判斷 map 的 key 是否被刪除可以通過name, ok := m["name"] 第二個返回值來判斷茫船,如果 ok 為真表示 map 中存在該 key 相反表示 map 并不存在該 key。

fmt.Println("delete valuse")
    name, ok := m["name"]
    fmt.Println(name,ok) //golang basic true
    delete(m,"name")
    name, ok= m["name"]
    fmt.Println(name,ok)// false

也可以放置占位符形式接收返回值扭屁。

_, ok := tuts["scala base"]
    fmt.Println(ok)
images.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末算谈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子料滥,更是在濱河造成了極大的恐慌然眼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葵腹,死亡現(xiàn)場離奇詭異高每,居然都是意外死亡,警方通過查閱死者的電腦和手機践宴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門鲸匿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阻肩,你說我怎么就攤上這事带欢。” “怎么了烤惊?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵乔煞,是天一觀的道長。 經(jīng)常有香客問我柒室,道長渡贾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任雄右,我火速辦了婚禮剥啤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘不脯。我一直安慰自己,他們只是感情好刻诊,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布防楷。 她就那樣靜靜地躺著,像睡著了一般则涯。 火紅的嫁衣襯著肌膚如雪复局。 梳的紋絲不亂的頭發(fā)上冲簿,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音亿昏,去河邊找鬼峦剔。 笑死,一個胖子當著我的面吹牛角钩,可吹牛的內(nèi)容都是我干的吝沫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼递礼,長吁一口氣:“原來是場噩夢啊……” “哼惨险!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脊髓,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤辫愉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后将硝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恭朗,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年依疼,在試婚紗的時候發(fā)現(xiàn)自己被綠了痰腮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涛贯,死狀恐怖诽嘉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弟翘,我是刑警寧澤虫腋,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站稀余,受9級特大地震影響悦冀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜睛琳,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一盒蟆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧师骗,春花似錦历等、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春寡夹,著一層夾襖步出監(jiān)牢的瞬間处面,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工菩掏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魂角,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓智绸,卻偏偏與公主長得像野揪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子传于,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容