原文: 《Solidity 極簡入門: 6. 映射類型 mapping》
作者:0xAA

我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每週更新1-3 講。

所有代碼開源在github :github.com/AmazingAng/WTFSolidity

這一講,我們將介紹solidity 中的哈希表:映射(Mapping)類型。

映射Mapping

在映射中,人們可以通過鍵(Key)來查詢對應的值(Value),比如:通過一個人的id 來查詢他的錢包地址。

聲明映射的格式為 mapping(_KeyType => _ValueType),其中_KeyType 和_ValueType 分別是Key 和Value 的變量類型。例子:

Solidity極簡入門第六講:映射類型 mapping

映射的規則

規則1:映射的_KeyType 只能選擇solidity 默認的類型,比如uint,address 等,不能用自定義的結構體。而_ValueType 可以使用自定義的類型。下面這個例子會報錯,因為_KeyType 使用了我們自定義的結構體:

Solidity極簡入門第六講:映射類型 mapping

規則2:映射的存儲位置必須是storage,因此可以用於合約的狀態變量,函數中的stoage 變量。不能用於public 函數的參數或返回結果中。

規則3:如果映射聲明為public,那麼solidity 會自動給你創建一個getter 函數,可以通過Key 來查詢對應的Value。

規則4:給映射新增的鍵值對的語法為_Var[_Key] = _Value ,其中_Var 是映射變量名,_Key 和_Value 對應新增的鍵值對。例子:

Solidity極簡入門第六講:映射類型 mapping

總結

這一講,我們介紹了solidity 中哈希表——映射(Mapping)的用法。至此,我們已經學習了所有常用變量種類,之後我們會學習控制流if-else, while 等。