go語言map與string的相互轉換的實現

2022-09-26 11:06:11 字數 3214 閱讀 1652

import (

"encoding/json")

func maptojson(param map[string]inte***ce{}) string

import (

"encoding/json")

func jsontomap(str string) map[string]inte***ce{}

err := json.unmarshal(byte(str), &tempmap)

if err != nil

return tempmap

}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 personsalar

}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

}

go語言中的map

package main import fmt sort func main 同上 var b map int string make map int string 通過make建立map var c make map int string 簡化寫法 d make map int string 設定...

go語言map的使用

go語言中的map 對映 字典 是一種內建的資料結構,它是乙個無序的key value鍵值對的集合,資料結構是堆,底層是使用雜湊表實現的,屬於引用型別。四種方式建立map make map string string,5 make map string string map string strin...

Go 語言Map 集合

map 是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。map 是一種集合,所以我們可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,我們無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的。可以使用內建函式 ma...