區塊鏈技術語言(十九):Go語言字典
在C++、Java、C#語言裡,使用map,需要先引用相應的庫。在Go語言裡,使用map不需要引入任何庫,並且使用更加方便。
1
概述
Go語言中的map(對映、字典)是一種內建的資料結構,它是一個無序的鍵值對(key:value)集合,key類似於索引,可以通過key快速檢索value。
如圖1所示,字典變數info包含三個鍵值對,每個key對應一個value。
2
字典的宣告和初始化
2.1 字典的宣告
字典變數宣告的關鍵詞是var,字典的型別包含三個要素:關鍵詞map、鍵型別keyType、值型別valueType。字典的宣告格式如下:

注: a. m1是字典的變數名,keyType是鍵型別,valueType是值型別;
b.一個map裡所有的鍵都是唯一的;
c.所有的鍵必須是支援“==”和“!=”操作符的型別,切片、函式以及包 含切片的結構體型別(結構體型別在下一節介紹)因為具有引用語義,不能作為鍵,使用這些型別會造成編譯錯誤;
d.value可以是任意型別,沒有限制;
e.map裡所有key的資料型別必須是相同的,value的資料型別也必須相同, 但key和value的資料型別可以不相同;
f.map是無序的,無法決定它的返回順序。所以,每次列印結果的順序有可 能不同。
2.2 空字典
僅僅宣告、而沒有初始化的字典為空字典。空字典是不能儲存鍵值對的。

2.3 字典的初始化
和切片的直接建立方式類似,字典的建立方式如表1所示。

注: a. 通過make()函式建立的字典可以指定字典的容量,列印結果為map[];
b.map超出容量時會自動擴容;
c.不能使用cap()函式計算map的容量。
3
字典的幾種操作
對字典的操作包括:賦值、遍歷、查詢和刪除鍵值對。
3.1 賦值
對字典賦值的格式如下:

a.對已經存在的鍵值賦值:這相當於對已知鍵值對進行修改;
b.新增不存在的鍵值對:前提是字典完成過初始化。

3.2 遍歷
關鍵詞range可以結合for迴圈對字串、陣列、切片進行遍歷,返回索引值和該索引值所對應的元素值。關鍵詞range也可以結合for迴圈對map遍歷,返回的是key和對應的value。對字典遍歷的格式如下:

如果省略v,則只返回key,可以通過key得到對應的value,格式如下:

如果僅需要value值,則用佔位符替換k,格式如下:

示例如下:

3.3 查詢
遍歷可以查詢字典裡所有的key和value,但如果要判斷某個key對應的value是否存在,無法使用range查詢,但可以通過下面程式碼實現查詢功能:

上面程式碼的第一行也可以放到if語句裡,實現格式如下:

示例如下:

3.4 刪除鍵值對
Go語言提供了一種內建函式——delete()函式,這個函式可以刪除map內的鍵值對,刪除格式如下:

注: a. mapName為字典變數名,key為指定要刪除的鍵;
b. key只能是一個,不能是多個,即每次只能刪除一個元素;
c.如果要刪除的key不在字典裡,這個函式執行後將什麼都不發生。

4
字典作為函式引數
字典變數作為函式引數,在函式間的傳遞是引用傳遞,不是值傳遞。
ofollow,noindex"> 原文連結:區塊鏈技術語言(十九):Go語言字典
參考資料
[1] 許式偉,呂桂華.Go語言程式設計[M].北京:人民郵電出版社,2012:36-38.
本文完,獲取更多資訊,敬請關注區塊鏈工程師。
來源:鏈塊學院
本文由布洛克專欄作者釋出,代表作者觀點,版權歸作者所有,不代表布洛克科技觀點
——TheEnd——
關注“布洛克科技”