Go 語言程式設計 高階資料型別 Map 集合

2021-10-07 19:54:28 字數 2804 閱讀 4576

集合(map)是一種無序的 hash 鍵值對集合。通過 key 來快速檢索 value,所以我們可以像迭代字串、陣列和切片那樣迭代它。golang 的 map 資料型別類似於 python 的字典資料型別,但封裝程度較原始。

可以使用用 map 關鍵字來宣告乙個 map 變數,也可以使用內建的 make() 函式來定義乙個 map 變數:

var map_variable map

[key_data_type]value_data_type

// or

map_variable :=

make

(map

[key_data_type]value_data_type)

注意,make() 函式會完成變數的初始化,而 map 關鍵字僅僅是宣告了乙個變數,沒有被初始化的 map 變數,預設值為 nil,不能直接用於存放鍵值對。可見 map 變數是引用語義的。

示例:

package main

import

"fmt"

func

main()

/* 檢視元素在集合中是否存在 */

capital, ok := countrycapitalmap[

"american"

]if ok

else

}

delete() 函式用於刪除 map 集合中指定的元素,引數為 map 變數和其對應的 key。

示例:

package main

import

"fmt"

func

main()

/* 刪除元素 */

delete

(countrycapitalmap,

"france"

) fmt.

println

("法國條目被刪除"

) fmt.

println

("刪除元素後地圖"

)for country :=

range countrycapitalmap

}

結果:

法國條目被刪除

刪除元素後地圖

japan 首都是 tokyo

india 首都是 new delhi

italy 首都是 rome

package main

import

("fmt"

)type hashmap struct

var table [16]

(*hashmap)

func

inittable()

}}func

getinstance()

[16](

*hashmap)

return table

}func

genhashcode

(k string

)int

var hashcode int=0

var lastindex int

=len

(k)-

1for i :=

range k

hashcode +=

(hashcode +

int(k[i]))

*31}return hashcode

}func

indextable

(hashcode int

)int

func

indexnode

(hashcode int

)int

func

put(k string

, v string

)string

var tableindex =

indextable

(hashcode)

var nodeindex =

indexnode

(hashcode)

var headptr [16]

(*hashmap)

=getinstance()

var headnode = headptr[tableindex]if(

*headnode)

.key ==

""var lastnode *hashmap = headnode

var nextnode *hashmap =

(*headnode)

.next

for nextnode !=

nil&&

(indexnode((

*nextnode)

.hashcode)

< nodeindex)if(

*lastnode)

.hashcode == thisnode.hashcode

if lastnode.hashcode < thisnode.hashcode

if nextnode !=

nilreturn""}

func

get(k string

)string

for(

*node)

.next !=

nil node =

(*node)

.next

}return""}

//examples

func

main()

結果:

a_put

b_put

p_put

Go 語言程式設計 高階資料型別 陣列

向函式傳遞陣列 指標陣列 陣列是具有相同資料型別的一組已編號且長度固定的資料項序列,可以是任意的原始資料型別也可以是自定義的資料型別。陣列元素可以通過索引 位置 來讀取 或者修改 索引從 0 開始,第乙個元素索引為 0,第二個索引為 1,以此類推。golang 陣列宣告需要指定元素型別及元素個數,使...

Go 語言程式設計 高階資料型別 指標

乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前需要宣告 定義乙個指標變數。宣告乙個指標變數,格式 var var name type示例 var ip int 宣告整型指標變數 var fp float32 宣告浮點型指標變數 指標使用流程 宣告指標變數。為指標變數賦值。訪問指...

go語言資料型別之集合map

初識 map是一種無序的基於key value的資料結構,go語言中的map是引用型別,必須初始化才能使用。它得內部基於雜湊表 hash 實現 map keytype valuetypekeytype 表示鍵的型別。valuetype 表示鍵對應的值的型別。方法一 scoremap make map...