solidity入门学习——mapping

今天我们来学习下映射的用法,具体以网站的注册过程为例。
一、solidity中,映射的关键字为mapping,首先我们先来定义两个mapping, mapping(address =>uint) idmapping和mapping(uint =>string) namemapping。idmapping用来表示地址变量和整型变量的对应关系,在注册过程中用来表示账户地址和注册号;namemapping用来表示整型变量和字符串的对应关系,在注册过程中用来表示注册号和用户名称。
同时将sum的初始值设成1,用来储存注册号,并在后续调用注册函数时累加。用户调用注册函数时,需要传入参数name,同时将合约的部署地址赋值给账户地址(address account =msg.sender;),并通过两个mapping将账户地址和注册号,以及注册号和用户名称对应起来。
调用register之后,我们来测试下,可以通过getIdByAddress来获取注册号,通过getNameById来获取用户姓名。代码如下,

pragma solidity^0.5.0;
contract MapTest{
    mapping(address =>uint) idmapping;
    mapping(uint =>string) namemapping;
    uint public sum=0;
    function register(string memory name)public{
        address  account =msg.sender;
        sum++;
        idmapping[account]=sum;
        namemapping[sum]=name;
    }
    function getIdByAddress(address add)view public returns(uint){
        return idmapping[add];
    }
    function getNameById(uint id)view public returns(string memory){
        return namemapping[id];
    }
}

二、在下面图片中,在部署合约Map之后,在1处输入用户姓名点击register,在2处输入账户地址可以得到注册号,在3处输入注册号得到用户姓名,说明合约部署成功。
在这里插入图片描述
三、在第六行代码代码和倒数第四行代码中,起先我没有在string 后面加入memory ,程序一直提示报错,提示data location must be “memory” for parameter in function.加入memory之后问题得到解决。

发布了8 篇原创文章 · 获赞 2 · 访问量 2860

猜你喜欢

转载自blog.csdn.net/qinmiaofu/article/details/103955988