8-Go語言基礎-字典(Map)

簡介

map是一種哈希表的引用,map類型可以縮寫成map[k]v;
不要拿浮點型當key
map的元素不是一個變量,禁止對map的元素取地址:&m["a"]這是錯誤的會提示compile error: cannot take address of map element
len()函數可以回去map的元素個數
range可以對map進行遍歷,但是遍歷的結果的順序是不確定的。

使用

  1. 使用make函數創建
m:=make(map[string]int)
  1. 字面量創建map
m:=map[string]int{}
  1. map和nil的關係
    值爲nil的map是不能操作元素的,否則會panic,所以建議使用make()函數創建map。
	var m1 = map[string]int{}
	var m2 map[string]int
	var m3=make(map[string]int)
	fmt.Println("m1==nil:",m1==nil)//m1==nil: false
	fmt.Println("m2==nil:",m2==nil)//m2==nil: true
	fmt.Println("m3==nil:",m3==nil)//m3==nil: false
  1. 使用元素
m["a"]=1
  1. 刪除元素:delete(m,"a")
  2. 獲取不存在的key
  3. 獲取不存在的key不會報錯,會返回對應value類型的零值。
package main
import (
	"fmt"

)

func main() {
	m1:=make(map[string]int)
	fmt.Println(m1["a"])//0

	m2:=make(map[int]bool)
	fmt.Println(m2[1])//false
}
  1. 如何判斷是元素的值是零值,而不是因爲不存在key返回的零值。
    其實提供一種ok布爾值來判斷是否存在該元素。ok是布爾值,true代表元素存在,false代表元素不存在。
ig value,ok:=m["aaa"];ok{
	fmt.Println("key aaa存在")
}
  1. 如何順序遍歷map
    順序遍歷map的方法是,先把所有的key收集起來,組成一個slice,然後按照你想要的規則排序key,然後遍歷key的slice去獲取value。
package main
import (
	"fmt"
	"sort"

)

func main() {
	var m = map[string]int{"a":111,"c":333,"e":555,"d":444,"b":222}
	for k,v:=range m{
		fmt.Println(k,"=>",v)
	}
	fmt.Println("------------")
	var keys []string
	for key:=range m{
		keys=append(keys,key)
	}
	sort.Strings(keys)
	for _,k:=range keys{
		fmt.Println(k,"=>",m[k])
	}
}
=>打印結果
e => 555
d => 444
b => 222
a => 111
c => 333
------------
a => 111
b => 222
c => 333
d => 444
e => 555
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章