原文:《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 等。