# Solidity极简入门: 6. 映射类型 mapping **Published by:** [DAO4Resilience](https://paragraph.com/@dao4resilience/) **Published on:** 2022-04-24 **URL:** https://paragraph.com/@dao4resilience/solidity-6-mapping ## Content 这一讲,我们将介绍solidity中的哈希表:映射(Mapping)类型。映射Mapping在映射中,人们可以通过键(Key)来查询对应的值(Value),比如:通过一个人的id来查询他的钱包地址。 声明映射的格式为 mapping(_KeyType => _ValueType),其中_KeyType和_ValueType分别是Key和Value的变量类型。例子: mapping(uint => address) public idToAddress; // id映射到地址 mapping(address => address) public swapPair; // 币对的映射,地址到地址 映射的规则规则1:映射的_KeyType只能选择solidity默认的类型,比如uint,address等,不能用自定义的结构体。而_ValueType可以使用自定义的类型。下面这个例子会报错,因为_KeyType使用了我们自定义的结构体: // 我们定义一个结构体 Struct struct Student{ uint256 id; uint256 score; } mapping(Student => uint) public testVar; 规则2:映射的存储位置必须是storage,因此可以用于合约的状态变量,函数中的stoage变量。不能用于public函数的参数或返回结果中。 规则3:如果映射声明为public,那么solidity会自动给你创建一个getter函数,可以通过Key来查询对应的Value。 规则4:给映射新增的键值对的语法为var[_Key] = _Value ,其中是映射变量名,分别_Key和_Value对应新增的键值对。例子: function writeMap (uint _Key, address _Value) public{ idToAddress[_Key] = _Value; } 总结这一讲,我们介绍了solidity中哈希表——映射(Mapping)的用法。至此,我们已经学习了所有常用变量种类,之后我们会学习控制流if-else, while等。 ## Publication Information - [DAO4Resilience](https://paragraph.com/@dao4resilience/): Publication homepage - [All Posts](https://paragraph.com/@dao4resilience/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@dao4resilience): Subscribe to updates