Go語言的Map(映射)是一組無順序單一型態元素的集合,以另一型態的鍵(key)作為值(value)的索引。
Go使用內建的make(T)
函式及map[keyType]elementType
建立map。keyType
為key的型態;elementType
為元素(value)的型態。
例如下面宣告一個map變數m
,key型態為int
;value型態為string
。
m := make(map[int]string) // 建立一個key型態為int,value型態為string的map變數m
fmt.Println(m) // map[]
若map未初始化則為nil
,無法加入key及value,也當然無法從中取值,否則編譯時會報錯
var m map[int]string
fmt.Println(m == nil) // true
m[1] = "John" // panic: assignment to entry in nil map
fmt.Println(m)
在map變數後的方括弧內[]
設定key,後接賦值符=
設定對應的value到map中;
在map變數後的方括弧內[]
輸入key可取得對應的value;
若key不存在返回value型態的zero value。
m := make(map[int]string)
fmt.Println(m) // map[]
m[1] = "John" // 設定key=1的value="John"
m[2] = "Mary" // 設定key=2的value="Mary"
fmt.Println(m) // map[1:John 2:Mary]
fmt.Println(m[1]) // John
fmt.Println(m[2]) // Mary
fmt.Println(m[3]) // "" (empty string)
在map變數輸入key可返回兩個參數,第一個為元素值,第二表示key是否存在。
m := make(map[int]string)
m[1] = "John"
v, ok := m[1]
fmt.Println(v) // John
fmt.Println(ok) // true
v, ok = m[2]
fmt.Println(v) // ""
fmt.Println(ok) // false
也可使用map literal語法直接建立含key-value的map。
m := map[int]string { // map literal
1: "John",
2: "Mary",
}
fmt.Println(m) // map[1:John 2:Mary]
使用內建函式delete(m, k)
從map變數m
移除指定的key k
。
m := map[int]string {
1: "John",
2: "Mary",
}
delete(m, 1) // delete key=1, value="John"
fmt.Println(m) // map[2:Mary]
使用內建函式len(s)
取得map的長度。
m := map[int]string {
1: "John",
2: "Mary",
}
fmt.Println(len(m)) // 2
map的值型態為自訂的structEmployee
。
package main
import "fmt"
type Employee struct {
Id int
Name string
Age int8
}
func main() {
m := map[int]Employee { // key type is int, value type is struct Employee
1: {1, "John", 33}, // create value Employee by struct literal
2: {1, "Mary", 28},
}
fmt.Println(m) // map[1:{1 John 33} 2:{1 Mary 28}]
fmt.Println(m[3]) // {0 0}
}
使用range
走訪map如下,回傳的第一個值k
為key,第二個值v
為value。
package main
import "fmt"
type Employee struct {
Id int
Name string
Age int8
}
func main() {
m := map[int]Employee {
1: {1, "John", 33},
2: {1, "Mary", 28},
}
for k, v := range m { // use range to for loop map
fmt.Printf("key=%d, value=%v\n", k, v)
}
}
執行印出以下:
key=1, value={1 John 33}
key=2, value={1 Mary 28}
若希依放入的順序取出,參考「Golang 依放入順序遍歷map的值」。
沒有留言:
張貼留言