map 是 go 中的內建型別,它將鍵與值繫結到一起。可以通過鍵獲取相應的值。
可以通過將鍵和值的型別傳遞給內建函式 make 來建立乙個 map。語法為:make(map[keytype]valuetype)。(譯者注:map 的型別表示為 map[keytype]valuetype)例如:
personsalary := make(map[string]int)
上面的**建立了乙個名為 personsalary 的 map。其中鍵的型別為 string,值的型別為 int。
map 的 0 值為 nil。試圖給乙個 nil map 新增元素給會導致執行時錯誤。因此 map 必須通過 make 來初始化(譯者注:也可以使用速記宣告來建立 map,見下文)。
package main
import (
"fmt")
func main()
}
插入元素給 map 的語法與陣列相似。下面的**插入一些新的元素給 map personsalary。
func main()
也可以在宣告時初始化乙個陣列:
func main()
personsalary["mike"] = 9000
fmt.println("personsalary map contents:", personsalary)
}
string 並不是可以作為鍵的唯一型別,其他所有可以比較的型別,比如,布林型別,整型,浮點型,複數型別都可以作為鍵。
根據鍵獲取值的語法為:map[key],例如:
func main()
personsalary["mike"] = 9000
employee := "jamie"
fmt.println("salary of", employee, "is", personsalary[employee])
}
上面的程式非常簡單。員工 jamie 的工資被取出並列印。程式的輸出為:salary of jamie is 15000。
如果乙個鍵不存在會發生什麼?map 會返回值型別的 0 值。比如如果訪問了 personsalary 中的不存在的鍵,那麼將返回 int 的 0 值,也就是 0。
我們如何檢測乙個鍵是否存在於乙個 map 中呢?可以使用下面的語法:
value, ok := map[key]
上面的語法可以檢測乙個特定的鍵是否存在於 map 中。如果 ok 是 true,則鍵存在,value 被賦值為對應的值。如果 ok 為 false,則表示鍵不存在。
func main()
personsalary["mike"] = 9000
newemp := "joe"
value, ok := personsalary[newemp]
if ok == true else
}
range for 可用於遍歷 map 中所有的元素
package main
import "fmt"
func main()
personsalary["mike"] = 9000
fmt.println("all items of a map")
for key, value := range personsalary
}
值得注意的是,因為 map 是無序的,因此對於程式的每次執行,不能保證使用 range for 遍歷 map 的順序總是一致的。
delete(map, key) 用於刪除 map 中的 key。delete 函式沒有返回值。
func main()
personsalary["mike"] = 9000
fmt.println("all items of a map")
delete(personsalary, "steve")
for key, value := range personsalary
}
map 的大小
用內建函式 len 獲取 map 的大小:
func main()
personsalary["mike"] = 9000
fmt.println("length is", len(personsalary))
}
map 是引用型別與切片一樣,map 是引用型別。當乙個 map 賦值給乙個新的變數,它們都指向同乙個內部資料結構。因此改變其中乙個也會反映到另乙個:
func main()
personsalary["mike"] = 9000
fmt.println("original person salary", personsalary)
newpersonsalary := personsalary
newpersonsalary["mike"] = 18000
fmt.println("person salary changed", personsalary)
}
將 map 作為引數傳遞給函式也是一樣的。在函式中對 map 的任何修改都會影響在呼叫函式中看到。
• 比較 map
map 不能通過 == 操作符比較是否相等。== 操作符只能用來檢測 map 是否為 nil。
func main()
map2 := map1
if map1 == map2
}
上面的程式將會報錯:invalid operation: map1 == map2 (map can only be compared to nil)。
比較兩個 map 是否相等的方式是一一比較它們的元素是否相等。大家自己實現一下即可。
//判斷兩個map是否相等
func mapandmap(mymap1 map[string]int, mymap2 map[string]int) bool
//判斷值是否相同
for key, value := range mymap1
} return true
}
javer學c 全域性函式, 全域性變數
extern 全域性c c 中函式預設就是全域性的,變數寫在函式外的話預設也是全域性的.global.cpp,定義乙個全域性變數和乙個全域性函式 c include using namespace std int g int 10 void globalmethod 全域性函式的宣告需要使用exte...
為全域性變數賦值 關於多執行緒使用全域性變數的問題
coding utf 8 import threadingimport time 定義乙個全域性變數g num 0def test1 num global g num for i in range num g num 1 print g num def test2 num global g num ...
解決Ajax全域性變數賦值的問題
在做專案的過程中,以下 在1處a為0。然後通過乙個ajax請求乙個值為1的data賦予a,在2處a為1。然後來到3這裡的時候,a還是為0。通過查詢網路,得出原因是ajax預設的是非同步傳輸資料,在2處的a的scope只在ajax方法內部。1 var a 0 ajaxsetup get a.actio...