iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
1
自我挑戰組

Go從新學系列 第 12

[DAY 12]GO 裡使用map

  • 分享至 

  • xImage
  •  

前兩天介紹的 array & slice 都是以數字作為索引

今天要講的 map 可以利用數種資料型別做為鍵(索引),取得相對應的值

  • 建立map

package main

func main() {
	m := make(map[string]string)

	m["thresh"] = "hook"
	m["nami"] = "splash"
	m["bard"] = "meeps"
	m["blitz"] = "grab"
}

前面以 thresh 作為鍵, hook 作為對應的值(映射)

若我們需要檢測某項鍵/值是否存在

可以利用 log.fatal 來執行檢測

    if !(m["sona"] == "") {
        log.Fatal("no such thing")
    }
package main

import "log"

func main() {
	m := make(map[string]string)

	m["thresh"] = "hook"
	m["nami"] = "splash"
	m["bard"] = "meeps"
	m["blitz"] = "grab"
	m["sona"] = "song"

	v, ok := m["thresh"]
	if !ok {
		log.Fatal("it should be true")
	}

	if !(v == "hook") {
		log.Fatal("Wrong value")
	}

	_, ok = m["sona"]
	if !(ok == false){
		log.Fatal("it should be false")
	}
}

https://play.golang.org/p/j7HNfNQAF_K

如果是不存在的值 , v = 0 , ok = false

因為我的 sona 應為空值 所以系統會發出警告 "it should be false"

  • 刪除元素

如果我們需要刪除某對鍵值

只需要呼叫該 map 並告訴他要刪除的鍵即可

delete(m, "sona")
  • 走訪map

map是沒有順序的

如果用for迴圈列印

可以發現是隨機排列的

package main

import "log"

func main() {
	m := make(map[string]string)

	m["thresh"] = "hook"
	m["nami"] = "splash"
	m["bard"] = "meeps"
	m["blitz"] = "grab"
	m["sona"] = "song"
    
    for i := 0; i < 10; i++ {
        for k, v := range m {
            fmt.Println(fmt.Sprintf("%s: %s", k, v))
        }
 
        fmt.Println("")
    }
}    

部份內容參考自:
https://michaelchen.tech/golang-programming/map/#%E7%A7%BB%E9%99%A4%E9%8D%B5%E5%80%BC%E5%B0%8D
https://hsinyu.gitbooks.io/golang_note/content/map_1.html


上一篇
[DAY 11]GO 的 切片(Slice)
下一篇
[DAY 13]GO 的 結構(struct)
系列文
Go從新學26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言